2012-12-11 69 views
7

我在另一個列表(具有變體的產品)中有一個列表。我希望父列表具有設置的屬性(僅爲idname)。具有屬性的列表的XML序列化

所需的輸出

<embellishments> 
    <type id="1" name="bar bar foo"> 
     <row> 
      <id>1</id> 
      <name>foo bar</name> 
      <cost>10</cost> 
     </row>  
    </type> 
</embellishments> 

目前代碼

[XmlRoot(ElementName = "embellishments", IsNullable = false)] 
public class EmbellishmentGroup 
{ 
    [XmlArray(ElementName="type")] 
    [XmlArrayItem("row", Type=typeof(Product))] 
    public List<Product> List { get; set; } 

    public EmbellishmentGroup() { 
     List = new List<Product>(); 
     List.Add(new Product() { Id = 1, Name = "foo bar", Cost = 10m }); 
    } 
} 

public class Product 
{ 
    [XmlElement("id")] 
    public int Id { get; set; } 

    [XmlElement("name")] 
    public string Name { get; set; } 

    [XmlElement("cost")] 
    public decimal Cost { get; set; } 
} 

電流輸出

<embellishments> 
    <type> 
     <row> 
      <id>1</id> 
      <name>foo bar</name> 
      <cost>10</cost> 
     </row> 
    </type> 
</embellishments> 

回答

9

你需要讓另一類代表type元素。然後您可以爲屬性添加屬性,如下所示:

[XmlRoot(ElementName = "embellishments", IsNullable = false)] 
public class EmbellishmentGroup 
{ 
    [XmlElement("type")] 
    public MyType Type { get; set; } 

    public EmbellishmentGroup() 
    { 
     Type = new MyType(); 
    } 
} 

public class MyType 
{ 
    [XmlAttribute("id")] 
    public int Id { get; set; } 

    [XmlAttribute("name")] 
    public string Name { get; set; } 

    [XmlElement("row")] 
    public List<Product> List { get; set; } 

    public MyType() 
    { 
     Id = 1; 
     Name = "bar bar foo"; 
     List = new List<Product>(); 
     Product p = new Product(); 
     p.Id = 1; 
     p.Name = "foo bar"; 
     p.Cost = 10m; 
     List.Add(p); 
    } 
} 

public class Product 
{ 
    [XmlElement("id")] 
    public int Id { get; set; } 

    [XmlElement("name")] 
    public string Name { get; set; } 

    [XmlElement("cost")] 
    public decimal Cost { get; set; } 
} 
相關問題