如何将复杂的XML转换为.NET类?

时间:2012-02-13 12:03:10

标签: c# .net xml 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>

5 个答案:

答案 0 :(得分:11)

尝试使用Visual Studio附带的XSD.exe工具。 这是一些文档: http://www.codeproject.com/Articles/11317/From-XML-to-Strong-Types-in-C

答案 1 :(得分:6)

我建议使用XmlSerializer进行XML序列化。基本上,您需要创建与XML结构相对应的类,XmlSerializer负责其余的工作。 如果您可以控制XML格式,最好首先创建类,然后通过XmlSerializer生成一个示例xml,您可以填充实际数据。

答案 2 :(得分:3)

Microsoft提供this免费工具,用于从架构生成类。

答案 3 :(得分:2)

将类实例转换为Xml,反之亦然,称为序列化/反序列化。你会在互联网上找到很多关于这个话题的文章,一个好的开始here

答案 4 :(得分:0)

最好的解决方案是:

http://www.codeproject.com/Articles/11317/From-XML-to-Strong-Types-in-C

  1. 编写XML结构(XML)
  2. 从XML文件创建XSD文件
  3. 从XSD文件创建C#类

  4. <强> 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

    <?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#类

    //------------------------------------------------------------------------------
    // <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;
            }
        }
    }