簡體   English   中英

C#XML將所有屬性反序列化為集合

[英]C# XML deserialize all attributes as a collection

我有一個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.
}

問題在於Mapping節點 - 我寧願得到它的屬性集合,然后為每個節點創建一個字符串 - 我不確定如何解決這個問題 - 我嘗試過使用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 - 缺少一個結束標記)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM