gpt4 book ai didi

C# XML反序列化所有属性为一个集合

转载 作者:太空宇宙 更新时间:2023-11-03 21:43:30 25 4
gpt4 key购买 nike

我有一个如下所示的 XML 文件:

<Categories>
<Category Name="Mobile">
<SubCategory Name="Mobile Phones" MarkUp="1.2">
<Mapping Category1="COMMUNICATION" Category2="PHONE" Category3="MOBILE" Category4="MOBILE PHONE" Category5="ANDROID" Category6="" Category7="" />
<Mapping Category1="COMMUNICATION" Category2="PHONE" Category3="MOBILE" Category4="MOBILE PHONE" Category5="BLACKBERRY OS" Category6="" Category7="" />
<Mapping Category1="COMMUNICATION" Category2="PHONE" Category3="MOBILE" Category4="MOBILE PHONE" Category5="OTHER" Category6="" Category7="" />
<Mapping Category1="COMMUNICATION" Category2="PHONE" Category3="MOBILE" Category4="MOBILE PHONE" Category5="SYMBIAN" Category6="" Category7="" />
<Mapping Category1="COMMUNICATION" Category2="PHONE" Category3="MOBILE" Category4="MOBILE PHONE" Category5="WINDOWS PHONE" Category6="" Category7="" />
</SubCategory>
</Categories>

我目前正在反序列化:

[XmlRoot(ElementName = "Category")]
public class XmlCategory
{
[XmlAttribute(AttributeName = "Name")]
public string Name { get; set; }

[XmlElement("SubCategory")]
public XmlSubCategory[] XmlSubCategories { get; set; }
}

public class XmlSubCategory
{
[XmlAttribute(AttributeName = "Name")]
public string Name { get; set; }

[XmlAttribute(AttributeName = "MarkUp")]
public string MarkUp { get; set; }

[XmlElement("Mapping")]
public XmlMapping[] Mappings { get; set; }
}

public class XmlMapping
{
[XmlAttribute(AttributeName = "Category1")]
public string Category1 { get; set; }
// etc.
}

问题在于映射节点 - 我宁愿获取它的属性集合,然后为每个属性创建一个字符串 - 虽然我不确定如何解决这个问题 - 我已经尝试使用 XmlAnyAttribute 和 XmlArrayItem

干杯

最佳答案

是的,您可以在这里使用XmlAnyAttribute,尽管我个人建议显式成员方法要好得多,即您的

public class XmlMapping
{
[XmlAttribute] public string Category1 { get; set; }
[XmlAttribute] public string Category2 { get; set; }
[XmlAttribute] public string Category3 { get; set; }
[XmlAttribute] public string Category4 { get; set; }
[XmlAttribute] public string Category5 { get; set; }
[XmlAttribute] public string Category6 { get; set; }
[XmlAttribute] public string Category7 { get; set; }
}

但是,这也有效:

public class XmlMapping
{
[XmlAnyAttribute]
public XmlAttribute[] Attributes { get; set; }
}

然后只是枚举它:

foreach (var map in subCat.Mappings)
{
var attribs = map.Attributes;
if (attribs != null)
{
foreach (var attrib in attribs)
{
System.Console.WriteLine("{0}={1}", attrib.Name, attrib.Value);
}
}
}

对我来说很好用...(虽然我不得不修复你损坏的 xml - 缺少结束标记)

关于C# XML反序列化所有属性为一个集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18231725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com