I'm trying to deserialize a file with the following contents, and getting an error:
<?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>
Here's the method I'm using to deserialize that file:
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;
}
}
I'm getting the Exception: "There is an error in XML document (2, 2)." on the line with Deserialize(reader)
Here's the collection:
[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; }
}
What's wrong?
The deserialization is failing because of the presence of the <RootNode> element. The deserializer doesn't expect this element; it expects a bunch <Collection> elements.
Instead, try deserializing from the top level, using a class like this
[XmlRootAttribute("RootNode")]
public class RootNode
{
[XmlElement("Collection")]
public Collection[] CollectionBag { get; set; }
}
And changing the deserialization to
var xmlSerializer = new XmlSerializer(typeof(RootNode));
data = ((RootNode)xmlSerializer.Deserialize(reader)).CollectionBag;
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.