C# Windows Phone 8-序列化/反序列化XML时出错
我有一个包含a类对象列表的a类和B类C# Windows Phone 8-序列化/反序列化XML时出错,c#,xml,silverlight,windows-phone,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 } 但在反序列化它时,我得到“…根元素丢失”错误 IsolatedStorage
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.Open,isfile);
DataContractSerializer ser=新的DataContractSerializer(itemlist.Items.GetType());
XmlReader=XmlReader.Create(ifs);
itemlist.items=(List)ser.ReadObject(reader);
有没有其他/更好的方法可以序列化/反序列化一个包含另一个类的列表/集合的类?在我看来,问题仅仅是,当您通过
文件模式打开文件进行反序列化时,您正在擦除文件。所以根元素当然丢失了:它是空的。您可能有FileMode.Create
和FileMode.Open
在序列化/反序列化之间反转。然后使用
添加一些,以便更好地测量
序列化应使用FileMode.Create
,截断或创建新数据的文件
反序列化应该使用FileMode.Open
,以查看现有数据。在我看来,问题只是,当您通过FileMode.Create打开文件进行反序列化时,您正在擦除文件。所以根元素当然丢失了:它是空的。您可能有FileMode.Create
和FileMode.Open
在序列化/反序列化之间反转。然后使用
添加一些,以便更好地测量
序列化应使用FileMode.Create
,截断或创建新数据的文件
反序列化应该使用FileMode.Open
,查看现有数据。那么,实际的文件内容是什么?根元素丢失了吗?这可能与您未正确处理/关闭的事物数量有关吗?您是否尝试添加reader.MoveToContent()
?我正在写入项目列表并读取它们(文件被覆盖)。我在reader.MoveToContent()中得到“根元素丢失”。那么,实际的文件内容是什么?根元素丢失了吗?这可能与您未正确处理/关闭的事物数量有关吗?您是否尝试添加reader.MoveToContent()
?我正在写入项目列表并读取它们(文件被覆盖)。我还收到了reader.MoveToContent()的“根元素丢失”。很抱歉,这是复制粘贴错误。在实际代码中,FileMode在反序列化时打开,在序列化时创建。我在问题中更正了它。@aaa再次:文件内容是什么?我正在序列化Itemcollection类。序列化正在成功完成。但是在反序列化时,我得到了错误。所以我不知道这个文件包含什么。如何检查文件内容?@aaa在写入文件后,使用任何基于文本的阅读器API打开文件,并转储contentsSorry,这是复制粘贴错误。在实际代码中,FileMode在反序列化时打开,在序列化时创建。我在问题中更正了它。@aaa再次:文件内容是什么?我正在序列化Itemcollection类。序列化正在成功完成。但是在反序列化时,我得到了错误。所以我不知道这个文件包含什么。如何检查文件内容?@aaa在写入文件后,使用任何基于文本的阅读器API打开文件,然后转储内容
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);