C# 带有集合和XmlSerializer的XML
我有一个XSD: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
<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>