我有一些类型需要序列化/反序列化并根据所选对象生成UI。用户界面也会更改对象,而我必须将其序列化以将其存储在我的应用中。
所以:
[obj_apple stored in the app] -> select obj_apple -> deserialize -> show in UI -> use the UI to change obj_apple -> deselect obj_apple -> serialize -> [obj_apple stored in the app]
必须对对象进行序列化/反序列化,并且此数据必须是字符串。这就是为什么我认为有一个xml序列化器会更好。
哪种类型的序列化器最好?是否有任何好的例子可以为自定义类型实现这个?
答案 0 :(得分:2)
答案 1 :(得分:1)
你有几个字符串选择; xml,可以使用XmlSerializer
(或DataContractSerializer
完成,但对xml的控制要少得多)或JSON(JSON.net等)。
XmlSerializer
的典型类看起来像:
public class Apple {
public string Variety {get;set;}
public decimal Weight {get;set;}
// etc
}
(请注意,我希望上面的内容也适用于JSON.net)
由于属性,上述类在数据绑定方案等中也应该可以正常工作。
你会序列化这个:
Apple obj = new Apple { Variety = "Cox", Weight = 12.1M};
XmlSerializer ser = new XmlSerializer(typeof(Apple));
StringWriter sw = new StringWriter();
ser.Serialize(sw, obj);
string xml = sw.ToString();
StringReader sr = new StringReader(xml);
Apple obj2 = (Apple)ser.Deserialize(sr);
但您可以自定义xml:
[XmlType("apple"), XmlRoot("apple")]
public class Apple {
[XmlAttribute("variety")]
public string Variety {get;set;}
[XmlAttribute("weight")]
public decimal Weight {get;set;}
// etc
}
DataContractSerializer
理想情况更像是:
[DataContract]
public class Apple {
[DataMember]
public string Variety {get;set;}
[DataMember]
public decimal Weight {get;set;}
}