我有一个样例XML文件需要反序列化:
这是根类,包含另一个类的列表:
我认为结构已经编码正确。我是否遗漏了某些指定?
我有这个样本XML文件,需要进行反序列化:
<?xml version="1.0" encoding="utf-8"?>
<CollectionOfUnits>
<Unit>
<StringVar>TohleJeString</StringVar>
<Int32Var>24</Int32Var>
<DoubleVar>29.6</DoubleVar>
<DateTimeVar>17.11.1968</DateTimeVar>
<CharVar>c</CharVar>
</Unit>
<Unit>
<StringVar>TohleJeTakéString</StringVar>
<Int32Var>17</Int32Var>
<DoubleVar>5.9</DoubleVar>
<DateTimeVar>06.07.1415</DateTimeVar>
<CharVar>p</CharVar>
</Unit>
<Unit>
<StringVar>NoATohleTaké</StringVar>
<Int32Var>2</Int32Var>
<DoubleVar>78.5</DoubleVar>
<DateTimeVar>06.12.1774</DateTimeVar>
<CharVar>x</CharVar>
</Unit>
</CollectionOfUnits>
这是根类,包含另一个类的列表:
[XmlRoot("CollectionOfUnits", IsNullable = false)]
public class XmlExampleCollectionOfUnits
{
[XmlArray("Unit")]
public List<XmlExampleBasicUnit> Units { get; set; }
public XmlExampleCollectionOfUnits(List<XmlExampleBasicUnit> units)
{
Units = units;
}
public XmlExampleCollectionOfUnits()
{
}
}
一个类的结构如下:
public class XmlExampleBasicUnit
{
public String StringVar { get; set; }
public Int32 Int32Var { get; set; }
public Double DoubleVar { get; set; }
public DateTime DateTimeVar { get; set; }
public Char CharVar { get; set; }
}
我在调试过程中使用了XmlSerializer文档中的以下函数,它们非常有用(这是输出被调用的地方):
private void serializer_UnknownNode(object sender, XmlNodeEventArgs e)
{
Console.WriteLine("Unknown Node:" + e.Name + "\t" + e.Text);
}
private void serializer_UnknownAttribute(object sender, XmlAttributeEventArgs e)
{
XmlAttribute attr = e.Attr;
Console.WriteLine("Unknown attribute " + attr.Name + "='" + attr.Value + "'");
}
这是输出结果:
Unknown Node:StringVar
Unknown Node:Int32Var
Unknown Node:DoubleVar
Unknown Node:DateTimeVar
Unknown Node:CharVar
Unknown Node:StringVar
Unknown Node:Int32Var
Unknown Node:DoubleVar
Unknown Node:DateTimeVar
Unknown Node:CharVar
Unknown Node:StringVar
Unknown Node:Int32Var
Unknown Node:DoubleVar
Unknown Node:DateTimeVar
Unknown Node:CharVar
我认为结构已经编码正确。我是否遗漏了某些指定?
[XmlArray]
表示二级层次结构 - 你可能需要使用[XmlElement("Unit")]
。 - Marc Gravell