为什么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
任何没有setter的属性总是被反序列化为默认值。
JavaScriptSerializer
内部使用反射来序列化和反序列化对象。如果属性中不存在setter,则序列化程序无法修改该属性的值。因此,它将被初始化为默认值。
在上面的代码中,属性Collection没有默认值,因此在反序列化期间将其分配为null。