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

Xml serializing and deserializing with memory stream

以下代码在尝试反序列化代码时找不到根元素时出现错误:

An exception of type 'System.InvalidOperationException' occurred in System.Xml.dll but was not handled in user code
Additional information: There is an error in XML document (0, 0).
Inner exception: {"Root element is missing."}

代码看起来很简单,但是在谷歌上搜索和搜索这个问题并没有得到任何明确的答案——只有类似的问题,但答案无济于事……或者我误解了什么.

    [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; }
}

Root element is missing 中所谓的重复问题使用了 XMLDocument 对象并且有不同的正确答案。

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

memStream.Position = 0;

或者...

memStream.Seek(0, SeekOrigin.Begin);

您可能想要重置您的 MemoryStream 的位置,因为在将您的 XML 序列化到它之后,该位置将在最后。

memStream.Position = 0;
XmlSerializer = new XmlSerializer(testObject.GetType());
TestObject testObj = ((TestObject)xmlSerialzer.Deserialize(memStream));