繁体   English   中英

为嵌套XML创建通用类

[英]Create generic classes for nested XML

我可能会走错方向,但是我想为以下XML结构创建通用类。

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <success>true</success>
   <data>
      <item>
         <Barcode>20450004941980</Barcode>
         <ChildDocuments>
            <success>true</success>
            <data>
               <item>
                  <StateId>10</StateId>
               </item>
            </data>
            <errors />
            <warnings />
            <info />
         </ChildDocuments>
      </item>
   </data>
   <errors />
   <warnings />
   <info />
</root>

以及ChildDocuments中可能有更多元素。 我创建了以下结构:

[Serializable()]
[System.Xml.Serialization.XmlRoot("root")]
public class XmlRoot<T>
{
    public XmlRoot()
    {
        DataArray = new List<T>();
    }

    [XmlElement("data")]
    public List<T> DataArray { get; set; }
}

[Serializable()]
public class XmlRootData<T>
{
    public XmlRootData()
    {
        ItemArray = new List<T>();
    }

    [XmlElement("item")]
    public List<T> ItemArray { get; set; }
}

现在我正在考虑如何为ChildDocument创建通用的东西。 它基本上具有与根文档相同的泛型结构。到目前为止,我知道ChildDocument可能只有1个级别,因此我可以创建2个更多的泛型类,例如:

[Serializable()]
public class XmlRootData<T,U>
{
    public XmlRootData()
    {
        ItemArray = new List<T>();
    }

    [XmlElement("item")]
    public List<T> ItemArray { get; set; }
    public List<XmlRoot<U>> ChildDataRoot { get; set; }
}

我可以为Child内部xml创建2个额外的类,但是我不是100%地确定最多可以有2个级别...

如果可以选择为XML生成通过类的工具,则可以执行以下步骤。 如果您具有包含完整数据的真实xml文件,这将有所帮助。 我根据问题中传递的xml文件给出了一个镜头。

  1. 从XML文件创建XSD XSD到XML
  2. 从XSD为它创建类 在此处输入图片说明

下面是生成的类,现在基于该类,您可以调整您的类或直接使用以下类。 您还可以重命名属性并通过使用适当的属性修饰属性来自定义所有名称。

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:4.0.30319.42000
//
//     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=4.6.81.0.
// 


/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.81.0")]
[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 root {

    private bool successField;

    private rootData dataField;

    private object errorsField;

    private object warningsField;

    private object infoField;

    /// <remarks/>
    public bool success {
        get {
            return this.successField;
        }
        set {
            this.successField = value;
        }
    }

    /// <remarks/>
    public rootData data {
        get {
            return this.dataField;
        }
        set {
            this.dataField = value;
        }
    }

    /// <remarks/>
    public object errors {
        get {
            return this.errorsField;
        }
        set {
            this.errorsField = value;
        }
    }

    /// <remarks/>
    public object warnings {
        get {
            return this.warningsField;
        }
        set {
            this.warningsField = value;
        }
    }

    /// <remarks/>
    public object info {
        get {
            return this.infoField;
        }
        set {
            this.infoField = value;
        }
    }
}

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.81.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
public partial class rootData {

    private rootDataItem itemField;

    /// <remarks/>
    public rootDataItem item {
        get {
            return this.itemField;
        }
        set {
            this.itemField = value;
        }
    }
}

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.81.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
public partial class rootDataItem {

    private ulong barcodeField;

    private rootDataItemChildDocuments childDocumentsField;

    /// <remarks/>
    public ulong Barcode {
        get {
            return this.barcodeField;
        }
        set {
            this.barcodeField = value;
        }
    }

    /// <remarks/>
    public rootDataItemChildDocuments ChildDocuments {
        get {
            return this.childDocumentsField;
        }
        set {
            this.childDocumentsField = value;
        }
    }
}

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.81.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
public partial class rootDataItemChildDocuments {

    private bool successField;

    private rootDataItemChildDocumentsData dataField;

    private object errorsField;

    private object warningsField;

    private object infoField;

    /// <remarks/>
    public bool success {
        get {
            return this.successField;
        }
        set {
            this.successField = value;
        }
    }

    /// <remarks/>
    public rootDataItemChildDocumentsData data {
        get {
            return this.dataField;
        }
        set {
            this.dataField = value;
        }
    }

    /// <remarks/>
    public object errors {
        get {
            return this.errorsField;
        }
        set {
            this.errorsField = value;
        }
    }

    /// <remarks/>
    public object warnings {
        get {
            return this.warningsField;
        }
        set {
            this.warningsField = value;
        }
    }

    /// <remarks/>
    public object info {
        get {
            return this.infoField;
        }
        set {
            this.infoField = value;
        }
    }
}

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.81.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
public partial class rootDataItemChildDocumentsData {

    private rootDataItemChildDocumentsDataItem itemField;

    /// <remarks/>
    public rootDataItemChildDocumentsDataItem item {
        get {
            return this.itemField;
        }
        set {
            this.itemField = value;
        }
    }
}

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.81.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
public partial class rootDataItemChildDocumentsDataItem {

    private byte stateIdField;

    /// <remarks/>
    public byte StateId {
        get {
            return this.stateIdField;
        }
        set {
            this.stateIdField = value;
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM