我有一个存储在列表中的类。
我连载它...
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/