为什么JavaScriptSerializer将属性反序列化为默认值或null

时间:2014-07-05 22:08:43

标签: c# asp.net serialization deserialization json-deserialization

我正在使用JavaScriptSerializer来序列化和反序列化我的对象中的属性。序列化期间一切正常。但是,很少有属性被序列化为默认值,而不是分配给它们的实际值。

这是我的班级

[Serializable]
public Class SimpleClass
{
    //This property is serialized properly
    //But always de-serialized to null
    [DefaultValue("null")]
    public List<string> Collection { get; }    
}

这是用于序列化和反序列化的代码

    SimpleClass testObject =new SimpleClass();
    testObject.Collection.Add("One");
    testObject.Collection.Add("Two");
    testObject.Collection.Add("Three");
    testObject.Collection.Add("Four");
    testObject.Collection.Add("Five");

    //Serializing the above object
    string serializedString = new JavaScriptSerializer().Serialize(testObject);

    //Deserializing the serialized string
    testObject = new JavaScriptSerializer().Deserialize<SimpleClass>(serializedString);

但是,在反序列化之后,testObject.Collection属性的值始终为null

1 个答案:

答案 0 :(得分:3)

任何没有setter的属性始终反序列化为默认值。

JavaScriptSerializer在内部使用Reflection来序列化和反序列化对象。如果属性中不存在setter,则序列化程序无法修改此属性的值。因此,它将使用其默认值进行初始化。

在上面的代码中,属性集合没有默认值,因此在反序列化期间它被指定为null。