C#反序列化XML異常:在 XML文檔(0, 0)中有一個錯誤“缺少根元素” ...
Q:
在反序列化 Xml 字元串為 Xml 對象時,拋出如下異常。
即在 XML文檔(0, 0)中有一個錯誤:缺少根元素。
A:
首先看下代碼:
StringBuilder sb = new StringBuilder();
using (MemoryStream stream = new MemoryStream())
{
StreamWriter writer = new StreamWriter(stream);
writer.Write(sb.ToString().Trim());
writer.Flush();
//stream.Position=0;
// or
//stream.Seek(0, SeekOrigin.Begin);
StreamReader reader = new StreamReader(stream);
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
object obj = xmlSerializer.Deserialize(reader);
reader.Close();
reader.Close();
writer.Close();
writer.Dispose();
}
拋出異常是在object obj = xmlSerializer.Deserialize(reader);
這裡出現的。
問題在於writer.Write(sb.ToString().Trim());
這裡,原因是進行了寫入操作,最後流的位置停留在尾部。因此,在反序列化之前將流的位置定位到開始 0 的位置即可。
這裡就是在 上面註釋的地方。