带有属性的列表的XML序列化

我在另一个列表(具有变体的产品)中有一个列表。 我希望父列表上设置属性(只是一个id和一个name )。

期望的输出

    1 foo bar 10    

现行守则

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

电流输出

    1 foo bar 10    

您需要创建另一个表示type元素的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 List { get; set; } public MyType() { Id = 1; Name = "bar bar foo"; List = new List(); 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; } }