Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将具有相同元素的嵌套XML转换为类_C#_Xml_Xml Deserialization - Fatal编程技术网

C# 将具有相同元素的嵌套XML转换为类

C# 将具有相同元素的嵌套XML转换为类,c#,xml,xml-deserialization,C#,Xml,Xml Deserialization,我需要一点帮助。 我有一个XML,其中包含相互嵌套的相同元素。 我能够使用这个问题创建一个C#类,在类中粘贴特殊的XML。 问题是代码一直在为每个嵌套元素创建类。 我只想为所有子元素创建一个泛型类 以下是示例XML: <?xml version="1.0" encoding="utf-8" ?> <CompanyFolders> <company title="My Company"> <departments> <

我需要一点帮助。 我有一个XML,其中包含相互嵌套的相同元素。 我能够使用这个问题创建一个C#类,在类中粘贴特殊的XML。 问题是代码一直在为每个嵌套元素创建类。 我只想为所有子元素创建一个泛型类

以下是示例XML:

 <?xml version="1.0" encoding="utf-8" ?>
<CompanyFolders>
  <company title="My Company">
    <departments>
      <department title="Retail Operations">
        <folders>
          <folder tite="Model Store"/>
          <folder tite="Retail Ops Manual"/>
          <folder tite="VM Guides &amp; planograms"/>
          <folder tite="About our Team"/>
        </folders>
      </department>
      <department title="Buying">
        <folders>
          <folder tite="Gold Jewellery">
            <folders>
              <folder tite="Gold">
                <folders>
                  <folder title="Color Range"/>
                  <folder title="Launch Packs"/>
                  <folder title="Grading"/>
                  <folder title="Herolines"/>
                  <folder title="Top Sellers"/>
                  <folder title="Launch &amp; price Change Calendar"/>
                </folders>
              </folder>
              <folder tite="Branded">
                <folders>
                  <folder title="Color Range"/>
                  <folder title="Launch Packs"/>
                  <folder title="Grading"/>
                  <folder title="Herolines"/>
                  <folder title="Top Sellers"/>
                  <folder title="Launch &amp; price Change Calendar"/>
                </folders>
              </folder>
            </folders>    
          </folder>
          <folder tite="Rings">
            <folders>
              <folder tite="Monthly Sales by store by diamond brand" />
              <folder tite="Line lists &amp; core ranges" />
              <folder tite="Current Hero Lines" />
              <folder tite="Diamond ambassador conference call details and agenda" />
            </folders>    
          </folder>
        </folders>
      </department>
      <department title="Property">
        <folders>
          <folder tite="Maintenance Forms"/>
          <folder tite="Portal for reporting maintenance issues"/>
          <folder tite="Security Advice"/>
          <folder tite="Security Policy"/>
          <folder tite="H&amp;S Policy and awareness"/>
          <folder tite="H&amp;S Forms"/>
          <folder tite="Insurance Documents"/>
          <folder tite="Out of Emergencies Contact list"/>
        </folders>
      </department>
    </departments>
  </company>
</CompanyFolders>

创建的类:

namespace MyXML
{

    /// <remarks/>
    [System.SerializableAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    [System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
    public partial class CompanyFolders
    {

        private CompanyFoldersCompany[] companyField;

        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("company")]
        public CompanyFoldersCompany[] company
        {
            get
            {
                return this.companyField;
            }
            set
            {
                this.companyField = value;
            }
        }
    }

    /// <remarks/>
    [System.SerializableAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    public partial class CompanyFoldersCompany
    {

        private CompanyFoldersCompanyDepartment[] departmentsField;

        private string titleField;

        /// <remarks/>
        [System.Xml.Serialization.XmlArrayItemAttribute("department", IsNullable = false)]
        public CompanyFoldersCompanyDepartment[] departments
        {
            get
            {
                return this.departmentsField;
            }
            set
            {
                this.departmentsField = value;
            }
        }

        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string title
        {
            get
            {
                return this.titleField;
            }
            set
            {
                this.titleField = value;
            }
        }
    }

    /// <remarks/>
    [System.SerializableAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    public partial class CompanyFoldersCompanyDepartment
    {

        private CompanyFoldersCompanyDepartmentFolder[] foldersField;

        private string titleField;

        /// <remarks/>
        [System.Xml.Serialization.XmlArrayItemAttribute("folder", IsNullable = false)]
        public CompanyFoldersCompanyDepartmentFolder[] folders
        {
            get
            {
                return this.foldersField;
            }
            set
            {
                this.foldersField = value;
            }
        }

        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string title
        {
            get
            {
                return this.titleField;
            }
            set
            {
                this.titleField = value;
            }
        }
    }

    /// <remarks/>
    [System.SerializableAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    public partial class CompanyFoldersCompanyDepartmentFolder
    {

        private CompanyFoldersCompanyDepartmentFolderFolder[] foldersField;

        private string titeField;

        /// <remarks/>
        [System.Xml.Serialization.XmlArrayItemAttribute("folder", IsNullable = false)]
        public CompanyFoldersCompanyDepartmentFolderFolder[] folders
        {
            get
            {
                return this.foldersField;
            }
            set
            {
                this.foldersField = value;
            }
        }

        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string tite
        {
            get
            {
                return this.titeField;
            }
            set
            {
                this.titeField = value;
            }
        }
    }

    /// <remarks/>
    [System.SerializableAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    public partial class CompanyFoldersCompanyDepartmentFolderFolder
    {

        private CompanyFoldersCompanyDepartmentFolderFolderFolder[] foldersField;

        private string titeField;

        /// <remarks/>
        [System.Xml.Serialization.XmlArrayItemAttribute("folder", IsNullable = false)]
        public CompanyFoldersCompanyDepartmentFolderFolderFolder[] folders
        {
            get
            {
                return this.foldersField;
            }
            set
            {
                this.foldersField = value;
            }
        }

        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string tite
        {
            get
            {
                return this.titeField;
            }
            set
            {
                this.titeField = value;
            }
        }
    }

    /// <remarks/>
    [System.SerializableAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    public partial class CompanyFoldersCompanyDepartmentFolderFolderFolder
    {

        private string titleField;

        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string title
        {
            get
            {
                return this.titleField;
            }
            set
            {
                this.titleField = value;
            }
        }
    }
}
名称空间MyXML
{
/// 
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute(“代码”)]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace=”“,IsNullable=false)]
公共部分类公司股东
{
私人公司股东公司[]公司领域;
/// 
[System.Xml.Serialization.xmlementAttribute(“公司”)]
上市公司股东公司[]公司
{
得到
{
返回此.companyField;
}
设置
{
this.companyField=值;
}
}
}
/// 
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute(“代码”)]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
公共部分类公司股东公司
{
私人公司股东公司部门[]部门字段;
私有字符串标题字段;
/// 
[System.Xml.Serialization.XmlArrayItemAttribute(“department”,IsNullable=false)]
上市公司股东公司部门[]部门
{
得到
{
返回此.departmentsField;
}
设置
{
this.departmentsField=值;
}
}
/// 
[System.Xml.Serialization.XmlAttributeAttribute()]
公共字符串标题
{
得到
{
把这个还给我;
}
设置
{
this.titleField=值;
}
}
}
/// 
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute(“代码”)]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
公共部分类公司股东公司部门
{
私人公司FoldersCompanyDepartmentFolder[]文件夹字段;
私有字符串标题字段;
/// 
[System.Xml.Serialization.XmlArrayItemAttribute(“文件夹”,IsNullable=false)]
公用公司文件夹CompanyDepartmentFolders[]文件夹
{
得到
{
返回此.foldersField;
}
设置
{
this.foldersField=值;
}
}
/// 
[System.Xml.Serialization.XmlAttributeAttribute()]
公共字符串标题
{
得到
{
把这个还给我;
}
设置
{
this.titleField=值;
}
}
}
/// 
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute(“代码”)]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
公共分部类CompanyFoldersCompanyDepartmentFolder
{
私人公司FoldersCompanyDepartmentFolderFolderFolderFolderFolders[]文件夹字段;
私有字符串字段;
/// 
[System.Xml.Serialization.XmlArrayItemAttribute(“文件夹”,IsNullable=false)]
公用公司文件夹CompanyDepartmentFolderFolderFolder[]文件夹
{
得到
{
返回此.foldersField;
}
设置
{
this.foldersField=值;
}
}
/// 
[System.Xml.Serialization.XmlAttributeAttribute()]
公共字符串
{
得到
{
返回此字段;
}
设置
{
this.tite字段=值;
}
}
}
/// 
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute(“代码”)]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
公共分部类CompanyFoldersCompanyDepartmentFolderFolderFolder
{
私人公司FoldersCompanyDepartmentFolderFolderFolderFolderFolderFolderFolderFolderFolderFolders[]文件夹字段;
私有字符串字段;
/// 
[System.Xml.Serialization.XmlArrayItemAttribute(“文件夹”,IsNullable=false)]
公用公司文件夹CompanyDepartmentFolderFolderFolderFolderFolderFolder[]文件夹
{
得到
{
返回此.foldersField;
}
设置
{
this.foldersField=值;
}
}
/// 
[System.Xml.Serialization.XmlAttributeAttribute()]
公共字符串
{
得到
{
返回此字段;
}
设置
{
this.tite字段=值;
}
}
}
/// 
[System.SerializableAttribute()]
[系统公司
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);
            XElement companyFolders = (XElement)doc.FirstNode;
            new CompanyFolders(companyFolders);
        }
    }
    public class CompanyFolders
    {
        public static List<Company> companies = new List<Company>();
        public CompanyFolders(XElement companies)
        {
            CompanyFolders.companies = companies.Elements("company").Select(x => new Company(x)).ToList();
        }

        public class Company
        {
            string title { get; set; }
            public List<Department> departments = new List<Department>();
            public Company(XElement company)
            {
                title = (string)company.Attribute("title");
                departments = company.Descendants("department").Select(x => new Department(x)).ToList();
            }
            public class Department
            {
                string title { get; set; }
                public List<Folder> folders = new List<Folder>();
                public Department(XElement department)
                {
                    title = (string)department.Attribute("title");
                    folders = department.Element("folders").Elements("folder").Select(x => new Folder(x)).ToList();
                }
                public class Folder
                {
                    string title { get; set; }
                    public List<Folder> folders = new List<Folder>();
                    public Folder(XElement folder)
                    {
                        title = (string)folder.Attribute("title");
                        if (folder.Element("folders") != null)
                        {
                            folders = folder.Element("folders").Elements("folder").Select(x => new Folder(x)).ToList();
                        }
                    }
                }
            }
        }
    }
}