【问题标题】:XML with collections and XmlSerializer带有集合和 XmlSerializer 的 XML
【发布时间】:2012-03-28 07:21:05
【问题描述】:

我有一个 XSD:

<xs:complexType name="rootType">    
  <xs:sequence>
    <xs:element name="foo" type="fooType" minOccurs="1" maxOccurs="unbounded"/>
    <xs:element name="bar" type="barType" minOccurs="1" maxOccurs="unbounded"/>
  </xs:sequence>    
</xs:complexType>
<!-- SKIPPED -->
<xs:element name="root" type="rootType"></xs:element>

我有一个使用这个 XSD 构建的 XML:

<?xml version="1.0" encoding="utf-8"?>
<root>
  <foo><!-- SKIPPED --></foo>
  <foo><!-- SKIPPED --></foo>
  <foo><!-- SKIPPED --></foo>
  <bar><!-- SKIPPED --></bar>
  <bar><!-- SKIPPED --></bar>
  <bar><!-- SKIPPED --></bar>
  <bar><!-- SKIPPED --></bar>
</root>

现在我想使用 XmlSerializer 序列化/反序列化这个 XML。 我有 C# 课程:

public class fooType
{
    public string element { get; set; }
}

public class barType
{
    public string element { get; set; }
}

public class rootType
{
    public fooType[] foos { get; set; }
    public barType[] bars { get; set; }
}

有一些与 XML 相关的属性,例如 XmlElementAttribute,但为了简单起见,我在上面的示例中省略了它们。

现在请看一下rootType 类定义。这里我们有两个属性foosbars。它们将像 fooType[]barType[] 数组的根元素一样被序列化:

<?xml version="1.0" encoding="utf-8"?>
<root>
  <foos>
    <foo><!-- SKIPPED --></foo>
    <foo><!-- SKIPPED --></foo>
    <foo><!-- SKIPPED --></foo>
  </foos>
  <bars>
    <bar><!-- SKIPPED --></bar>
    <bar><!-- SKIPPED --></bar>
    <bar><!-- SKIPPED --></bar>
    <bar><!-- SKIPPED --></bar>
  </bars>
</root>

但这不是我想要的。如何按照本文开头的XSD和示例进行序列化?

【问题讨论】:

    标签: c# xml collections xsd xmlserializer


    【解决方案1】:

    根据您的标准,我将在 rootType 上实施 IXmlSerializable。这里有一篇关于如何创建您正在寻找的 XML 的精彩文章。

    Proper way to implement IXmlSerializable?

    【讨论】:

      【解决方案2】:

      我发现找出如何设计类以匹配特定模式的最快方法是向后运行xsd.exe 工具。告诉它从你的模式中生成类,并将它们与你的手写类进行比较,看看你哪里出错了。这是获得序列化程序工作方式经验的好方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-04
        • 2019-02-26
        • 1970-01-01
        • 2012-05-16
        • 1970-01-01
        相关资源
        最近更新 更多