Serializing an XML List with Attributes

I have a list inside another list (product with options). I would like the parent list to have the attributes set on it (just id and name ).

Desired Result

 <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> 

+7
source share
1 answer

You need to create another class that represents the type element. Then you can add properties for attributes to it, for example:

 [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; } } 
+9
source

All Articles