【发布时间】:2016-08-05 14:55:31
【问题描述】:
试图反序列化列表。 我收到以下错误:
System.InvalidOperationException:XML 文档中存在错误 (1, 2)。 ---> System.InvalidOperationException: 不是预期的。
看到其他问题,例如:{"<user xmlns=''> was not expected.} Deserializing Twitter XML,但这也不能解决我的问题。
这是一个 Xml 示例
<authorizations>
<id>111</id>
<name>Name 1</name>
<Lists>
<List>
<id>1</id>
<id>2</id>
</List>
</Lists>
</authorizations>
<authorizations>
<id>222</id>
<name>Name 2</name>
<List />
</authorizations>
<authorizations>
<id>333</id>
<name>Name 3</name>
<List />
</authorizations>
类的创建如下:
public class Authorization
{
[XmlElement("id")]
public string Id{ get; set; }
[XmlElement("name")]
public string Name{ get; set; }
[XmlArray("Lists")]
[XmlArrayItem("List")]
public List[] Items{ get; set; }
}
public class List
{
[XmlElement("id")]
public string Id{ get; set; }
}
public class AuthorizationList
{
[XmlArray("authorizations")]
public Authorization Authorizations{ get; set; }
}
已尝试将列表更改为 XmlArray、XmlArrayItem 或 Element。但是当我反序列化时仍然得到同样的错误。
反序列化代码示例:
public static T FromXml<T>(string xmlString)
{
T obj = default(T);
if (!string.IsNullOrWhiteSpace(xmlString))
{
using (var stringReader = new StringReader(xmlString))
{
var xmlSerializer = new XmlSerializer(typeof(T));
obj = (T)xmlSerializer.Deserialize(stringReader);
}
}
return obj;
}
【问题讨论】:
-
这不是一个有效的(
XmlSerializer预期的)xml。有效的从<?xml version="1.0"?>开始。您可以尝试在调用Deserialize()之前添加此行。另一件事是缺少用于数组项的容器(由XmlRootAttribute表示),请参见例如this. -
XmlSerializer可以处理缺少 XML 声明的 XML。但是,XML 必须只有一个root element。这个 XML 有多个根元素,所以根本不是真正的 XML。 -
将尝试添加根元素并通知您。感谢您的快速响应
-
如果您的“XML”确实缺少单个根元素,请查看XML parser, multipule roots 或C# XDocument Load with multiple roots 或There are multiple root elements load xml。
-
向 XML 添加根元素解决了该错误。但是现在反序列化返回0计数,还在验证中。
标签: c# xml serialization