C#反序列化XML异常:在 XML文档(0, 0)中有一个错误“缺少根元素”

Q:

在反序列化 Xml 字符串为 Xml 对象时,抛出如下异常。

C#反序列化XML异常:在 XML文档(0, 0)中有一个错误“缺少根元素”

即在 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 的位置即可。

这里就是在 上面注释的地方。

上一篇:EC读书笔记系列之4:条款8 别让异常逃离析构函数


下一篇:Java数组的创建和初始化