我有这个示例 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
我认为结构编码正确。我是否遗漏了一些名称?
最佳答案
这里有3个问题;
- 您需要
XmlElementAttribute
,而不是XmlArrayAttribute
,因为您只有一层嵌套,所以:[XmlElement("Unit")]
- 您的日期不是有效的 xml 格式日期;适本地格式化它们( ISO 8601 ,所以:
1968-11-17
等),或者使用string
而不是DateTime
并手动转换它之后 char
类型不太合适——它本质上是一个整数类型;使用string
代替
通过这些更改:它应该可以工作。
关于c# - "Unknown Node:VarName"XML 反序列化期间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53813716/