使用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"));

我无法找到自己的解决方案,这就是为什么我决定张贴我的问题。也许以前有人遇到过同样的问题,能够帮助我。

提前感谢。

使用XmlSerializer反序列化XML文件.从内存流反序列化不工作

如果您在调用反序列化(例如,首先将XML加载到内存流中)之前实例化了内存流,那么它可能位于错误的索引处。试着

ms.Seek(0, SeekOrigin.Begin)

返回到流的开头

您必须将MemoryStream的位置设置为0。

((MemoryStream)ms).Position = 0;
MyXmlFile test = XmlSerializeObject.FromStream<MyXmlFile>(ms);