I have a list inside another list (a product with variants). I would like the parent list to have attributes set on it (just an id
and a name
).
Desired Output
<embellishments>
<type id="1" name="bar bar foo">
<row>
<id>1</id>
<name>foo bar</name>
<cost>10</cost>
</row>
</type>
</embellishments>
Current Code
[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; }
}
Current Output
<embellishments>
<type>
<row>
<id>1</id>
<name>foo bar</name>
<cost>10</cost>
</row>
</type>
</embellishments>
You need to make another class which represents the type
element. Then you can add properties to it for the attributes, like this:
[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; }
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With