序列化另一个元素中的0-n个元素

时间:2011-04-26 19:51:49

标签: c# .net xml-serialization xmlserializer

我有两个这样的课程:

public class Product
{
    public string Name { get; set; }
    public int Id { get; set; }
}

public class Category
{
    public string CategoryName { get; set; }
    public List<Product> Products { get; set; }
}

有没有什么方法可以在Category类上装饰我的Products属性,所以它是这样序列化的?

    <Container>
      <Category>
        <CategoryName>Unicorn Stuff</CategoryName>
        <Product>
          <Id>1212</Id>
          <Name>Unicorn Dust</Name>
        </Product>
        <Product>
          <Id>1829</Id>
          <Name>Horn Extension</Name>
        </Product>
        <Product>
          <Id>27373</Id>
          <Name>Facemask with hole</Name>
        </Product>
      </Category>
      <Category>
        <CategoryName>Pixie</CategoryName>
        <Product>
          <Id>222</Id>
          <Name>Pixie Dust</Name>
        </Product>    
      </Category>
    </Container>

请注意,每个类别都有类别元素(类别名称)和0-n Product子元素。

...或者我是否需要以更加手动的方式生成文档?

(这不是我设计xml结构的方式,但嘿 - 我们生活在一个不完美的世界)

2 个答案:

答案 0 :(得分:5)

[XmlElement]属性放在列表中:

public class Category
{
    public string CategoryName { get; set; }
    [XmlElement]
    public List<Product> Products { get; set; }
}

答案 1 :(得分:0)

我相信XSD.exe可以为您的班级创建XSD。然后,您只需使用基本的XmlSerializer序列化到XSD。

或者,您可以创建XSD,并从XSD生成您的课程。无论哪种方式都应该有效。