2012-02-07 2 views
1

私が持っている直列化可能クラスデシリアライズDBで動作

[Serializable]   
    public class Entity 
    { 
     public Guid? SomeId {get;set;} 
     ... 
    } 

それが持っているSomeId == nullの DBから復元されたそれはSomeId == Guid.Emptyを持っていますが、私はemtyのデフォルトコンストラクタを追加する場合、それがSomeIdで復元された場合== null。
誰もこのような動作を説明できますか?
ありがとう

+0

データベースにどのくらい正確に保存し、どのように復元しますか? – svick

+0

どのようなシリアル化を使用していますか?シリアライズされた出力がデータベースフィールドに書き込まれているか、またはORマッパーのようなものを使用していますか? – Aphelion

答えて

-1

Nullable型を使用しているので、Guid?、SomeIdがnullになるようにemty default construtorを追加します。

例:public boolを使用している場合は、 IsTrue {get;セット; }では、IsTrueプロパティにtrueまたはfalse、またはnullの値を割り当てることができます。詳細Nullable型のmsdn:http://msdn.microsoft.com/en-us/library/1t3y8s4s(v=vs.80).aspx

+1

それは意味をなさない。空のデフォルトコンストラクタがなければ、 'SomeId'は' null'に初期化されます。 – svick

0

空のコンストラクタは、Entityのインスタンスを作成するためにシリアライザで必要です。このインスタンスを作成した後、直列化された値で個々のプロパティを設定することで、直列化の逆シリアル化が実行されます。そのため、プロパティ設定者も公開する必要があります。

実際の問題を調べるには、データが適切にシリアル化されているかどうかを確認することができます。

あなたはOR mapperソフトウェアを使用していることを前提としています。 その場合、ORマッパーがSomeIdプロパティをデフォルト値で初期化している可能性もあります。

関連する問題