我在另一个列表(具有变体的产品)中有一个列表。我希望父列表上设置属性(只有id
和name
)。
所需输出
<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>
答案 0 :(得分:12)
您需要创建另一个代表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; }
}