c# - "Unknown Node:VarName"XML 反序列化期间

标签 c# xml xmlserializer xml-deserialization

我有这个示例 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/

相关文章:

java - XML 架构验证问题

c# - 反序列化 XML 为集合属性返回 null

c# - 从 UWP C# 应用在文件资源管理器中打开文件夹

c# - 使用 Linq 查询设置值?

c# - 当我的应用程序加载时,我应该将什么加载到内存中?

c# - MVC4 webapi 中的反序列化/模型绑定(bind)不适用于数组

.net - 错误 : Could not load the file or assembly 'ExcelAddIn1.XmlSerializers' or one of it's dependencies. 系统找不到指定的文件

c# - AutoFixture 是否有一种机制来检查返回任何类型列表的方法是否永远不会返回 null?

android - Android应用突然崩溃

javascript - 想知道是否有可用于 xml 的 .html() 等价物?