8

我在另一个列表(具有变体的产品)中有一个列表。我希望父列表在其上设置属性(只是 anid和 a 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>

4

1 回答 1

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; }
}
于 2012-12-11T01:34:41.197 回答