我正在使用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
答案 0 :(得分:3)
任何没有setter的属性始终反序列化为默认值。
JavaScriptSerializer
在内部使用Reflection来序列化和反序列化对象。如果属性中不存在setter,则序列化程序无法修改此属性的值。因此,它将使用其默认值进行初始化。
在上面的代码中,属性集合没有默认值,因此在反序列化期间它被指定为null。