【问题标题】:XML serialization of a list with attributes具有属性的列表的 XML 序列化
【发布时间】:2012-12-11 01:02:35
【问题描述】:

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

【问题讨论】:

    标签: c# asp.net xml serialization xml-serialization


    【解决方案1】:

    您需要创建另一个代表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; }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-04-13
      • 1970-01-01
      • 2011-07-16
      • 1970-01-01
      • 2023-03-08
      • 2012-12-24
      • 1970-01-01
      • 1970-01-01
      • 2018-08-07
      相关资源
      最近更新 更多