反序列化行为

时间:2012-02-07 04:56:47

标签: c# serialization

我有可序列化的类

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

在DB中,它有SomeId == null 从DB恢复时,它有SomeId == Guid.Empty,但如果我添加了emty默认构造函数,它将使用SomeId == null进行恢复。
任何人都可以解释这种行为 谢谢

2 个答案:

答案 0 :(得分:0)

序列化程序需要空构造函数来创建Entity的实例。创建此实例后,它将执行反序列化:使用序列化值设置各个属性。这就是为什么财产制定者也必须公开。

要找出实际问题,您可以开始验证数据是否已正确序列化。

我假设您使用的是OR mapper软件。 在这种情况下,也可能是OR映射器使用默认值初始化SomeId属性。

答案 1 :(得分:-1)

因为您使用Nullable类型 Guid?,所以您添加了emty默认construtor,以便SomeId为null。

例如:如果你使用公共布尔? IsTrue {得到;组; ,可以为IsTrue属性赋值true或false,或者为null。详细信息msdn中的Nullable类型:http://msdn.microsoft.com/en-us/library/1t3y8s4s(v=vs.80).aspx