使用XmlSerializer.Deserialize从MemoryStream反序列化XML文件不起作用

时间:2011-07-08 14:38:49

标签: c# memorystream xml-deserialization

我无法从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"));

我自己无法找到解决方案,这就是我决定发布问题的原因。也许有人之前遇到过同样的问题并且能够帮助我。

提前致谢。如果有什么不清楚请询问。

2 个答案:

答案 0 :(得分:7)

如果在调用反序列化之前实例化了内存流(比如,首先将XML加载到内存流中),可能是它的索引错误。尝试

ms.Seek(0, SeekOrigin.Begin)

返回流的开头。

答案 1 :(得分:0)

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

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