C# 使用XmlSerializer反序列化XML文件。从MemoryStream反序列化无效

C# 使用XmlSerializer反序列化XML文件。从MemoryStream反序列化无效,c#,memorystream,xml-deserialization,C#,Memorystream,Xml Deserialization,我无法从MemoryStream反序列化XML文件。我有一个生成的MyXmlFile类和一个MemoryStream,其中包含一个XML文件,我想将其反序列化为MyXmlFile类型的对象 public static class XmlSerializeObject { public static T FromStream<T>(Stream s) { var serializer = new XmlSerializer(typeof(T));

我无法从MemoryStream反序列化XML文件。我有一个生成的MyXmlFile类和一个MemoryStream,其中包含一个XML文件,我想将其反序列化为MyXmlFile类型的对象

public static class XmlSerializeObject
{
    public static T FromStream<T>(Stream s)
    {
        var serializer = new XmlSerializer(typeof(T));
        return (T) serializer.Deserialize(s);
    }
}
公共静态类XmlSerialized对象
{
公共静态T FromStream(流s)
{
var serializer=newxmlserializer(typeof(T));
返回(T)个序列化程序。反序列化(s);
}
}
我有一个MemoryStream ms,其中包含一个xml文件。如果我尝试将该流反序列化为MyXmlFile类型的对象,我会得到一个异常“XML文档中存在错误(0,0)”

MyXmlFile test=XmlSerializeObject.FromStream(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"));
FileStream outStream=File.OpenWrite(“D:\\p.xml”);
outStream.Write(((内存流)ms.ToArray(),0,((内存流)ms.ToArray().Length);
冲水;
exptream.Close();
MyXmlFile test=XmlSerializeObject.FromStream(File.OpenRead(“D:\\p.xml”);
我自己找不到解决办法,所以我决定把我的问题贴出来。也许有人以前也有过同样的问题,可以帮我解决


提前谢谢。如果有什么不清楚的地方,请询问。

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

ms.Seek(0, SeekOrigin.Begin)

要返回到流的开头,必须将MemoryStream的位置设置为0

((MemoryStream)ms).Position = 0;
MyXmlFile test = XmlSerializeObject.FromStream<MyXmlFile>(ms);
((内存流)ms)。位置=0;
MyXmlFile test=XmlSerializeObject.FromStream(毫秒);

您可以添加类的定义吗
MyXmlFile
?您可以发布如何将XML文件加载到内存流中,并确认您正在使用类似“Seek(0,SeekOrigin.Begin)”的内容将流重置回位置0吗听起来您可能在将其传递给序列化程序之前使用了memorystream,是这样吗?如果是,请事先重置内存流位置。-编辑:@Kane在网上击败了我。Position thing^^和@AllenG双双击败了我们,因为我已经做了太多次完全相同的事情。我觉得自己很愚蠢,没有想到这一点,也没有尝试过,但这就是为什么它不起作用的原因。:/非常感谢,发生在我身上的事比我想承认的还要多。
((MemoryStream)ms).Position = 0;
MyXmlFile test = XmlSerializeObject.FromStream<MyXmlFile>(ms);