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));
以下代码在尝试反序列化代码时找不到根元素时出现错误:
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));