“找不到根元素” - 读取内存流时

时间:2009-11-25 17:09:14

标签: c# .net xml

我有一个我存储在列表中的课程。

我序列化了......

        XmlDocument xd = new XmlDocument();
        MemoryStream ms = new MemoryStream();
        XmlSerializer xm = new XmlSerializer(typeof(List<BugWrapper>));

        xm.Serialize(ms, _bugs);
        StreamReader sr = new StreamReader(ms);
        string str = sr.ReadToEnd();
        xd.Load(ms);

我查看了str并发现它是空的,但是该集合有一个对象。

有关为什么会发生这种情况的任何想法?

1 个答案:

答案 0 :(得分:8)

是 - 您要保存到内存流,将其保留在结尾。你需要用以下方式“回放”它:

ms.Position = 0;

在您创建StreamReader

之前
xm.Serialize(ms, _bugs);
ms.Position = 0;
StreamReader sr = new StreamReader(ms);
string str = sr.ReadToEnd();

但是,在加载到XmlDocument之前,您需要再次将其重绕,除非您删除最后两行,我怀疑这些行只是用于调试。只是为了好的措施,让我们在完成它时关闭内存流:

using (MemoryStream stream = new MemoryStream())
{
     XmlSerializer serializer = new XmlSerializer(typeof(List<BugWrapper>));
     seralizer.Serialize(stream, _bugs);
     stream.Position = 0;

     XmlDocument doc = new XmlDocument();
     doc.Load(stream);
}
相关问题