1

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

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

4

1 回答 1

1

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

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

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

于 2013-01-31T13:01:59.257 回答