c# – XML反序列化期间的“未知节点:VarName”

我有这个示例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等),或者使用字符串而不是DateTime并在之后手动转换它
> char类型不太合适 – 它本质上是一个整数类型;改用字符串

随着这些变化:它应该工作.

上一篇:如何通过c#中的XML序列化输出十六进制数?


下一篇:Java自学习day8-类练习定义类Student