为什么JavaScriptSerializer将属性反序列化为它的默认值或空值

本文关键字:默认值 空值 JavaScriptSerializer 属性 反序列化 为什么 | 更新日期: 2023-09-27 18:11:30

我使用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

为什么JavaScriptSerializer将属性反序列化为它的默认值或空值

任何没有setter的属性总是被反序列化为默认值。

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

在上面的代码中,属性Collection没有默认值,因此在反序列化期间将其分配为null。