c# - "Root element not found"- 读取内存流时

标签 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 并发现它是空的,但是该集合有一个对象。

对于为什么会发生这种情况有什么想法吗?

最佳答案

是的 - 您正在保存到内存流中,将其留在末尾。您需要“倒带”它:

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

关于c# - "Root element not found"- 读取内存流时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1798425/

相关文章:

c# - 如何在发布版本中删除对 log4net 的依赖?

任何顺序的 XML 元素,有些是必需的,有些不是

c# - 使用 BeginExecute 写入 Azure 表存储

c# - 如何在没有阴影的情况下绘制我自己的工具提示?

c# - Winforms 用户控件自定义事件

c# - SpecFlow Visual Studio 扩展尝试使用 SpecFlow 代码隐藏生成器 1.9

c# - 为什么在使用 OleDb 导入 Excel 时忽略第一个空行

java - 如何循环Arraylist<String>并添加到子节点以及将子节点添加到父节点

regex - XSLT - 正则表达式替换字符

c# - 如何在 C# nunit 中断言字典?