问题
I'm getting an error with the following code where it can't find a root element when it tries to deserialize the code:
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."}
It seems straightforward enough code, but googling and searching SO on the issue hasn't yielded any clear answers--only similar issues that are nonetheless that the answer don't help... or I'm misunderstanding something.
[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; }
}
The alleged duplicate question at Root element is missing uses XMLDocument objects and has a different correct answer.
回答1:
After serialization, the MemoryStream's position is > 0. You need to reset it before reading from it.
memStream.Position = 0;
Or...
memStream.Seek(0, SeekOrigin.Begin);
回答2:
You might want to reset the postition of your MemoryStream as after having serialized your XML to it the position will be at the end.
memStream.Position = 0;
XmlSerializer = new XmlSerializer(testObject.GetType());
TestObject testObj = ((TestObject)xmlSerialzer.Deserialize(memStream));
来源:https://stackoverflow.com/questions/30698349/xml-serializing-and-deserializing-with-memory-stream