将复杂类型XML转换为类

本文关键字:转换 XML 复杂 类型 | 更新日期: 2023-09-27 17:57:59

我想知道如何将这种复杂类型的xml转换为一个或多个类?

我在下面尝试了一下,我想知道是否有人可以帮我仔细检查一下?

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<lot_information lot_exp_date="XXXX-XX-XX" lot_number="123456">
<components> 
<component control="A" ref="A" family="XXXXX" component="12" id="1A1">
<target>42</target> 
<min>12</min >
<max>90</max>
<number>10</number> 
</component>
<component control="A" ref="A" family="XXXXX" component="13" id="1A2B3C">
<target>42</target>
<min>12</min>
<max>90</max>
<number>10</number>
</component>
</components> 
<families>
<control family="XXXXX" ctrl="ctrlA"/> 
<control family="XXXXX" ctrl="ctrlB"/>
<control family="XXXXX" ctrl="ctrlC"/> 
<control family="XXXXX" ctrl="ctrlD"/> 
</families> </lot_information>

这是我的模型类:

[Serializable]
public class LotInformation
{
    public string exp_date { get; set; }
    public Array[] lot_information { get; set; } 
    public int lot_number {get; set;} 
}
[Serializable]
public class Components {
    public Array[] ComponentControl { get; set; }
    public string ref { get; set; }
    public string family { get; set; }
    public int component { get; set; }
    public string id { get; set; }
}
[Serializable]
public class Family
{
    private string[] controlFamily { get; set; }
    private string ctrl { get; set; }
} 

只要仔细检查一下,如果我使用数组来保持XML文件的结构为该格式,这是否有意义。

最终,这将被反序列化,所以我想知道上面的内容是否有意义。

编辑:请不要评论自动化工具来帮助我。它们会让事情变得更复杂。我想写干净的代码,看看我所拥有的是否有意义。自动化工具为我提供了无符号整数、空名称空间和其他不必要的改进。

将复杂类型XML转换为类

您的xml数据当前无效,将<Components>更改为<components>应该有效。

如果您有Visual studio 2013,则可以将XML粘贴到类中。可能看起来很难看,但至少你应该确保它是正确的。

复制XML数据,然后在Visual studio中复制。编辑->粘贴特殊->将XML粘贴为类

编辑

使用代码示例更新这是我清理自动生成的代码时得到的,没有关于字段是否来自XML中的属性的信息。这可以通过属性的注释进行更新。

我通过将类型简化为字符串或int来清理代码,并使用自动属性而不是显式属性,并删除了自动生成的xml属性。

[Serializable]
public class Lot_information {    
    public Component[] components { get; set; }
    public Control[] families { get; set; }
    public string lot_exp_date { get; set;}
    public int lot_number { get; set;}
}
[Serializable]
public class Component {    
    public int target { get; set; }    
    public int min { get; set; }    
    public int max { get; set; }    
    public int number { get; set; }
    public string control { get; set; }
    public string @ref { get; set; }
    public string family { get; set; }
    public int component { get; set; }
    public string id { get; set; }
}
[Serializable]
public class Control {
    public string family { get; set; }
    public string ctrl { get; set; }
}

您可以使用XSD.EXE工具

  1. Xsd yourxml.xml

以获取您的xml.xsd文件。然后

  1. Xsd yourxml.Xsd/classes

这将自动生成类文件。