2012-12-11 3 views
7

Ho una lista in un altro elenco (un prodotto con varianti). Vorrei che l'elenco dei genitori avesse gli attributi impostati su di esso (solo uno id e uno name).Serializzazione XML di un elenco con attributi

output desiderato

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

codice attuale

[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; } 
} 

Corrente di uscita

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

risposta

9

Hai bisogno di fare un'altra classe che rappresenta l'elemento type. Quindi è possibile aggiungere proprietà ad esso per gli attributi, in questo modo:

[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; } 
}