2012-02-07 23 views
1

我有序列化類反序列化行爲

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

在DB有SomeId == NULL 當從DB恢復它SomeId == Guid.Empty,但如果我添加emty默認構造函數是恢復了與SomeId == null。
任何人都可以解釋這種行爲。
謝謝

+0

你到底該如何將它保存到數據庫,以及如何恢復它? – svick 2012-02-07 06:38:45

+0

你使用什麼樣的序列化?序列化輸出寫入數據庫字段,還是使用類似OR映射器的東西? – Aphelion 2012-02-07 08:19:21

回答

-1

因爲您使用可空類型Guid?,你添加emty默認構造函數,以便SomeId爲null。

例如:如果你使用公共布爾? IsTrue {get;組; },可以爲IsTrue屬性賦值true或false,或者爲null。詳細信息msdn中的可枚舉類型:http://msdn.microsoft.com/en-us/library/1t3y8s4s(v=vs.80).aspx

+1

這沒有任何意義。沒有空的默認構造函數,'SomeId'仍然會被初始化爲'null'。 – svick 2012-02-07 06:40:02

0

序列化程序需要空的構造函數才能創建Entity的實例。創建此實例後,它將執行反序列化:使用它們的序列化值設置各個屬性。這就是爲什麼財產製定者也必須公開。

要找出您的實際問題,您可以開始驗證數據是否已正確序列化。

我假定您使用的是OR mapper軟件。 在這種情況下,也可能是OR映射器正在使用默認值初始化SomeId屬性。