我有一个包含A类对象列表的A类和B类。
public class Item
{
public string X{ get; set; }
public string Y{ get; set; }
}
public class ItemCollection
{
List<Item> items = new List<Item>();
//Some methods
}
我可以通过以下方式序列化:
IsolatedStorageFileStream ifs = new IsolatedStorageFileStream("myxml.xml", FileMode.Create, isfile);
DataContractSerializer ser = new DataContractSerializer(itemlist.items.GetType());
XmlWriter writer = XmlWriter.Create(ifs);
ser.WriteObject(writer, itemlist.items);
但是在反序列化时,我得到“......根元素缺失。”错误。
IsolatedStorageFileStream ifs = new IsolatedStorageFileStream("myxml.xml", FileMode.Open, isfile);
DataContractSerializer ser = new DataContractSerializer(itemlist.Items.GetType());
XmlReader reader=XmlReader.Create(ifs);
itemlist.items= (List<Item>)ser.ReadObject(reader);
是否还有其他/更好的方法来序列化/反序列化包含另一个类的列表/集合的一个类?
答案 0 :(得分:1)
在我看来,问题只是当您通过FileMode.Create
打开反序列化文件时擦除该文件。所以当然缺少根元素:它是空的。您可能在序列化/反序列化之间反转了FileMode.Create
和FileMode.Open
。然后添加一些using
以获得良好的衡量标准。
序列化应使用FileMode.Create
来截断或创建新数据文件。
反序列化应使用FileMode.Open
来查看现有数据。