C# 将具有相同元素的嵌套XML转换为类
我需要一点帮助。 我有一个XML,其中包含相互嵌套的相同元素。 我能够使用这个问题创建一个C#类,在类中粘贴特殊的XML。 问题是代码一直在为每个嵌套元素创建类。 我只想为所有子元素创建一个泛型类 以下是示例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 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 & 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 & 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 & price Change Calendar"/>
</folders>
</folder>
</folders>
</folder>
<folder tite="Rings">
<folders>
<folder tite="Monthly Sales by store by diamond brand" />
<folder tite="Line lists & 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&S Policy and awareness"/>
<folder tite="H&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();
}
}
}
}
}
}
}