使用XmlSerializer反序列化XML文件.从内存流反序列化不工作
本文关键字:反序列化 内存 工作 文件 XmlSerializer XML 使用 | 更新日期: 2023-09-27 18:01:29
我有麻烦从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);
}
}
我有一个MemoryStream ms包含一个xml文件。如果我试图将该流反序列化为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"));
我无法找到自己的解决方案,这就是为什么我决定张贴我的问题。也许以前有人遇到过同样的问题,能够帮助我。
提前感谢。
如果您在调用反序列化(例如,首先将XML加载到内存流中)之前实例化了内存流,那么它可能位于错误的索引处。试着
ms.Seek(0, SeekOrigin.Begin)
返回到流的开头
您必须将MemoryStream的位置设置为0。
((MemoryStream)ms).Position = 0;
MyXmlFile test = XmlSerializeObject.FromStream<MyXmlFile>(ms);