【问题标题】:Serialize 0-n elements inside another element序列化另一个元素内的 0-n 个元素
【发布时间】:2011-04-26 19:51:48
【问题描述】:

我有两个这样的课程:

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 个产品子元素。

...或者我必须下拉以更手动的方式生成文档吗?

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

【问题讨论】:

  • 当你尝试序列化它时会发生什么?
  • John>> 我得到一个包含产品的 Products-element。

标签: c# .net xml-serialization xmlserializer


【解决方案1】:

[XmlElement] 属性放在列表中:

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

【讨论】:

  • 我不敢相信我在询问之前没有尝试过这个。我已经在真正的类中拥有了 50 个 XmlElement 属性。太谢谢了! :)
  • @Kjensen:很高兴有帮助。您能否在您的问题中发布原始 XML 的示例?
【解决方案2】:

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
  • 2011-05-14
  • 2011-05-15
  • 2021-10-03
  • 1970-01-01
  • 2012-02-19
  • 2019-02-21
相关资源
最近更新 更多