读取内存流时出现“找不到根元素”的错误。

3

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

我对它进行序列化...

        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个回答

10

是的 - 你正在保存到内存流,将其留在了末尾。你需要用以下方式“倒回”它:

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);
}

1
Jon,你又救了大家一次 :) 谢谢你。 - Developer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接