C# 带有集合和XmlSerializer的XML

C# 带有集合和XmlSerializer的XML,c#,xml,collections,xsd,xmlserializer,C#,Xml,Collections,Xsd,Xmlserializer,我有一个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"/> &l

我有一个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>
有一些与XML相关的属性,比如XmlElementAttribute,但为了简单起见,我在上面的示例中省略了它们

现在请看一下
rootType
类定义。这里我们有两个属性
foos
bar
。它们将被序列化为
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和示例对它们进行序列化?

根据您的标准,我将在
rootType
上实现
IXmlSerializable
。这里有一本关于如何创建您所寻找的XML的好书


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

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 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>