我无法从MemoryStream反序列化我的XML文件。我有一个生成的MyXmlFile类和一个包含XML文件的MemoryStream,我想将其反序列化为MyXmlFile类型的对象。
public static class XmlSerializeObject
{
public static T FromStream<T>(Stream s)
{
var serializer = new XmlSerializer(typeof(T));
return (T) serializer.Deserialize(s);
}
}
我有一个包含xml文件的MemoryStream ms。如果我尝试将该流反序列化为MyXmlFile类型的对象,我会得到一个异常“XML文档中存在错误(0,0)”
MyXmlFile test = XmlSerializeObject.FromStream<MyXmlFile>(ms);
但是我确认我的MemoryStream是正确的。如果我首先将我的流写入光盘上的文件而不是再次读取该文件,它可以正常工作。
FileStream outStream = File.OpenWrite("D:\\p.xml");
outStream.Write(((MemoryStream)ms).ToArray(), 0, ((MemoryStream)ms).ToArray().Length);
outStream.Flush();
outStream.Close();
MyXmlFile test= XmlSerializeObject.FromStream<MyXmlFile>(File.OpenRead("D:\\p.xml"));
我自己无法找到解决方案,这就是我决定发布问题的原因。也许有人之前遇到过同样的问题并且能够帮助我。
提前致谢。如果有什么不清楚请询问。
答案 0 :(得分:7)
如果在调用反序列化之前实例化了内存流(比如,首先将XML加载到内存流中),可能是它的索引错误。尝试
ms.Seek(0, SeekOrigin.Begin)
返回流的开头。
答案 1 :(得分:0)
您必须将MemoryStream的位置设置为0。
((MemoryStream)ms).Position = 0;
MyXmlFile test = XmlSerializeObject.FromStream<MyXmlFile>(ms);