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

Dev*_*per 3 .net c# 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);
Run Code Online (Sandbox Code Playgroud)

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

为什么会发生这种情况?

Jon*_*eet 8

是的-你保存到内存流,在离开它结束.你需要用以下方式"回放"它:

ms.Position = 0;
Run Code Online (Sandbox Code Playgroud)

就在你创建之前StreamReader:

xm.Serialize(ms, _bugs);
ms.Position = 0;
StreamReader sr = new StreamReader(ms);
string str = sr.ReadToEnd();
Run Code Online (Sandbox Code Playgroud)

但是,您需要在加载之前再次回放它,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);
}
Run Code Online (Sandbox Code Playgroud)