我正在尝试使用以下内容反序列化文件,并收到错误:
<?xml version="1.0" encoding="utf-8"?>
<RootNode>
<Collection>
<Array1>
<Array1Item Id="0"/>
</Array1>
<Array2>
<Array2Item Id="7" Attribute="1" />
<Array2Item Id="4" Attribute="2" />
<Array2Item Id="16" Attribute="3" />
</Array2>
</Collection>
<Collection>
<Array1>
<Array1Item Id="398"/>
</Array1>
<Array2>
<Array2Item Id="7" Attribute="1" />
<Array2Item Id="25" Attribute="2" />
<Array2Item Id="27" Attribute="3" />
<Array2Item Id="4" Attribute="4" />
<Array2Item Id="10" Attribute="5" />
<Array2Item Id="24" Attribute="6" />
<Array2Item Id="26" Attribute="7" />
<Array2Item Id="30" Attribute="8" />
<Array2Item Id="31" Attribute="9" />
</Array2>
</Collection>
<Collection>
<Array1>
<Array1Item Id="406"/>
</Array1>
<Array2>
<Array2Item Id="7" Attribute="1" />
<Array2Item Id="25" Attribute="2" />
<Array2Item Id="27" Attribute="3" />
<Array2Item Id="4" Attribute="4" />
<Array2Item Id="10" Attribute="5" />
<Array2Item Id="24" Attribute="6" />
<Array2Item Id="26" Attribute="7" />
<Array2Item Id="30" Attribute="8" />
<Array2Item Id="31" Attribute="9" />
</Array2>
</Collection>
<Collection>
<Array1>
<Array1Item Id="2479"/>
</Array1>
<Array2>
<Array2Item Id="7" Attribute="1" />
<Array2Item Id="25" Attribute="2" />
<Array2Item Id="27" Attribute="3" />
<Array2Item Id="30" Attribute="4" />
<Array2Item Id="4" Attribute="5" />
<Array2Item Id="10" Attribute="6" />
<Array2Item Id="26" Attribute="7" />
</Array2>
</Collection>
<Collection>
<Array1>
<Array1Item Id="742"/>
<Array1Item Id="767"/>
<Array1Item Id="768"/>
<Array1Item Id="773"/>
<Array1Item Id="774"/>
<Array1Item Id="775"/>
<Array1Item Id="776"/>
<Array1Item Id="779"/>
<Array1Item Id="822"/>
<Array1Item Id="899"/>
<Array1Item Id="904"/>
<Array1Item Id="947"/>
<Array1Item Id="948"/>
<Array1Item Id="952"/>
<Array1Item Id="953"/>
<Array1Item Id="1021"/>
<Array1Item Id="1036"/>
<Array1Item Id="1085"/>
<Array1Item Id="1086"/>
<Array1Item Id="1087"/>
<Array1Item Id="1145"/>
<Array1Item Id="1146"/>
<Array1Item Id="1147"/>
<Array1Item Id="1148"/>
<Array1Item Id="1149"/>
<Array1Item Id="1151"/>
<Array1Item Id="1173"/>
<Array1Item Id="1194"/>
<Array1Item Id="1209"/>
<Array1Item Id="1213"/>
<Array1Item Id="1236"/>
<Array1Item Id="1243"/>
<Array1Item Id="1244"/>
<Array1Item Id="1248"/>
<Array1Item Id="1303"/>
<Array1Item Id="1399"/>
<Array1Item Id="1587"/>
<Array1Item Id="1589"/>
<Array1Item Id="1639"/>
<Array1Item Id="1655"/>
<Array1Item Id="1688"/>
<Array1Item Id="1708"/>
<Array1Item Id="1709"/>
<Array1Item Id="1713"/>
<Array1Item Id="1714"/>
<Array1Item Id="1735"/>
<Array1Item Id="1798"/>
<Array1Item Id="1814"/>
<Array1Item Id="1929"/>
<Array1Item Id="1944"/>
<Array1Item Id="1969"/>
<Array1Item Id="2034"/>
<Array1Item Id="2038"/>
<Array1Item Id="2059"/>
<Array1Item Id="2191"/>
<Array1Item Id="2362"/>
<Array1Item Id="2501"/>
<Array1Item Id="2980"/>
<Array1Item Id="2981"/>
<Array1Item Id="2982"/>
<Array1Item Id="2984"/>
<Array1Item Id="2985"/>
<Array1Item Id="3045"/>
<Array1Item Id="3047"/>
<Array1Item Id="3053"/>
<Array1Item Id="3054"/>
<Array1Item Id="3055"/>
<Array1Item Id="3149"/>
<Array1Item Id="3219"/>
<Array1Item Id="3220"/>
<Array1Item Id="3234"/>
<Array1Item Id="3288"/>
</Array1>
<Array2>
<Array2Item Id="7" Attribute="1" />
</Array2>
</Collection>
<Collection>
<Array1>
<Array1Item Id="2120"/>
<Array1Item Id="2125"/>
<Array1Item Id="2173"/>
<Array1Item Id="2534"/>
<Array1Item Id="2574"/>
<Array1Item Id="2575"/>
<Array1Item Id="2576"/>
<Array1Item Id="2577"/>
<Array1Item Id="2721"/>
</Array1>
<Array2>
<Array2Item Id="7" Attribute="1" />
</Array2>
</Collection>
<Collection>
<Array1>
<Array1Item Id="2299"/>
<Array1Item Id="2366"/>
<Array1Item Id="2464"/>
<Array1Item Id="2466"/>
<Array1Item Id="2465"/>
<Array1Item Id="2467"/>
</Array1>
<Array2>
<Array2Item Id="7" Attribute="1" />
</Array2>
</Collection>
</RootNode>
这是我用来反序列化该文件的方法:
protected virtual List<Collection> Deserialize()
{
List<Collection> data = new List<Collection>();
try
{
using (var reader = new StreamReader(Path))
{
var xmlSerializer = new XmlSerializer(typeof(List<Collection>));
data = (List<Collection>)xmlSerializer.Deserialize(reader);
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
return data;
}
}
我遇到了异常:“XML文档中存在错误(2,2)。”与Deserialize(reader)
这是集合:
[Serializable,
GeneratedCode("xsd", "2.0.50727.3038"),
DesignerCategory("code"),
DebuggerStepThrough,
XmlType(AnonymousType = true)]
public class Collection
{
public Collection()
{
Array1 = new Array1[0];
Array2 = new Array2[0];
}
[XmlArrayItem("Array1")]
public Array1Item[] Array1{ get; set; }
[XmlArrayItem("Array2 ", IsNullable = true)]
public Array2Item[] Array2 { get; set; }
}
怎么了?
答案 0 :(得分:0)
由于&lt; RootNode&gt;的存在,反序列化失败了。元件。反序列化器不期望这个元素;它期待一堆&lt; Collection&gt;元件。
相反,尝试使用像这样的类
从顶层反序列化[XmlRootAttribute("RootNode")]
public class RootNode
{
[XmlElement("Collection")]
public Collection[] CollectionBag { get; set; }
}
将反序列化更改为
var xmlSerializer = new XmlSerializer(typeof(RootNode));
data = ((RootNode)xmlSerializer.Deserialize(reader)).CollectionBag;