Windows Phone 8 - 序列化/反序列化XML时出错

时间:2013-01-31 10:26:34

标签: c# xml silverlight windows-phone

我有一个包含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);

是否还有其他/更好的方法来序列化/反序列化包含另一个类的列表/集合的一个类?

1 个答案:

答案 0 :(得分:1)

在我看来,问题只是当您通过FileMode.Create打开反序列化文件时擦除该文件。所以当然缺少根元素:它是空的。您可能在序列化/反序列化之间反转了FileMode.CreateFileMode.Open。然后添加一些using以获得良好的衡量标准。

序列化应使用FileMode.Create来截断或创建新数据文件。

反序列化应使用FileMode.Open来查看现有数据。