C# 如何将复杂的 XML 转换为 .NET 类?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/9260184/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to convert complex XML to .NET Class?
提问by Developer
I have this XMLand just wondering how I can convert into C# class?
我有这个XML,只是想知道如何转换为C# 类?
<?xml version="1.0" encoding="utf-8"?>
<TextScrollerItems xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Item type="text" ID="234">
<Text Color="Blue">
Sample text...
</Text>
</Item>
<Item type="image" ID="2456">
<Image>
clientLogo.png
</Image>
</Item>
</TextScrollerItems>
采纳答案by Giorgio Minardi
give a try to the XSD.exe tool shipped with Visual Studio. Here's some docs: http://www.codeproject.com/Articles/11317/From-XML-to-Strong-Types-in-C
尝试使用 Visual Studio 附带的 XSD.exe 工具。这里有一些文档:http: //www.codeproject.com/Articles/11317/From-XML-to-Strong-Types-in-C
回答by Jan Kratochvil
I'd recommend XML serialization using XmlSerializer. Basically, you need to create classes which correspond to the XML structure and the XmlSerializer takes care of the rest. If you have control over the XML format, it is better to first create the classes and than generate a sample xml via XmlSerializer which you can than fill with real data.
我建议使用XmlSerializer 进行XML 序列化。基本上,您需要创建对应于 XML 结构的类,而 XmlSerializer 负责其余的工作。如果您可以控制 XML 格式,最好先创建类,然后通过 XmlSerializer 生成示例 xml,您可以用真实数据填充它。
回答by vc 74
回答by Mujtaba Hassan
回答by Developer
The best solution is this one:
最好的解决方案是这个:
http://www.codeproject.com/Articles/11317/From-XML-to-Strong-Types-in-C
http://www.codeproject.com/Articles/11317/From-XML-to-Strong-Types-in-C
- Write an XML structure (XML)
- Create XSD file from XML file
- Create C# classes from XSD file
- 编写 XML 结构 (XML)
- 从 XML 文件创建 XSD 文件
- 从 XSD 文件创建 C# 类
XML
XML
<?xml version="1.0" encoding="utf-8"?>
<TextScrollerItems xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Item type="text" ID="234">
<Text Color="Blue">
Sample text...
</Text>
</Item>
<Item type="image" ID="2456">
<Image>
clientLogo.png
</Image>
</Item>
</TextScrollerItems>
XSD
XSD
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="TextScrollerItems" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="TextScrollerItems" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Item">
<xs:complexType>
<xs:sequence>
<xs:element name="Image" type="xs:string" minOccurs="0" msdata:Ordinal="0" />
<xs:element name="Text" nillable="true" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent msdata:ColumnName="Text_Text" msdata:Ordinal="1">
<xs:extension base="xs:string">
<xs:attribute name="Color" type="xs:string" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="type" type="xs:string" />
<xs:attribute name="ID" type="xs:string" />
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
C# classes
C# 类
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.5448
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System.Xml.Serialization;
//
// This source code was auto-generated by xsd, Version=2.0.50727.3038.
//
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public partial class TextScrollerItems {
private TextScrollerItemsItem[] itemsField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("Item", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public TextScrollerItemsItem[] Items {
get {
return this.itemsField;
}
set {
this.itemsField = value;
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
public partial class TextScrollerItemsItem {
private string imageField;
private TextScrollerItemsItemText[] textField;
private string typeField;
private string idField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public string Image {
get {
return this.imageField;
}
set {
this.imageField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("Text", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true)]
public TextScrollerItemsItemText[] Text {
get {
return this.textField;
}
set {
this.textField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string type {
get {
return this.typeField;
}
set {
this.typeField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string ID {
get {
return this.idField;
}
set {
this.idField = value;
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
public partial class TextScrollerItemsItemText {
private string colorField;
private string valueField;
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string Color {
get {
return this.colorField;
}
set {
this.colorField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlTextAttribute()]
public string Value {
get {
return this.valueField;
}
set {
this.valueField = value;
}
}
}

