Xml使用内存流进行序列化和反序列化

And*_*ell 4 c# xml serialization

我在下面的代码中遇到错误,它在尝试反序列化代码时无法找到根元素:

System.Xml.dll中发生类型为"System.InvalidOperationException"的异常但未在用户代码中处理
附加信息:XML文档(0,0)中存在错误.
内部异常:{"缺少根元素."}

这似乎是直截了当的代码,但谷歌搜索和搜索SO在这个问题上没有产生任何明确的答案 - 只有类似的问题仍然是答案没有帮助......或者我误解了一些东西.

    [TestMethod]
    public void TestSerialize()
    {
        XmlSerializer serializer = new XmlSerializer(testObject.GetType());
        MemoryStream memStream = new MemoryStream();
        serializer.Serialize(memStream, testObject);

        XmlSerializer xmlSerializer = new XmlSerializer(testObject.GetType());
        TestObject testObj = ((TestObject)xmlSerializer.Deserialize(memStream));
        assert(testObject == testObj);
    }

public class TestObject
{
    public int IntProp { get; set; }
    public string StringProp { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Root元素中涉嫌重复的问题缺失使用XMLDocument对象,并且具有不同的正确答案.

gle*_*bob 11

序列化后,MemoryStream的位置> 0.您需要在读取之前重置它.

memStream.Position = 0;
Run Code Online (Sandbox Code Playgroud)

要么...

memStream.Seek(0, SeekOrigin.Begin);
Run Code Online (Sandbox Code Playgroud)