2012-03-28 11 views
0

Ich habe eine XSD:XML mit Sammlungen und XmlSerializer

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

Ich habe eine XML mit dieser XSD gebaut:

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

Jetzt möchte ich diese XML serialisiert/deserialisiert XmlSerializer verwenden. Ich habe C# -Klassen:

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

Es gibt einige XML-Attribute waren, wie XmlElementAttribute, aber ich weglassen sie in Beispiel oben der Einfachheit halber.

Schauen Sie sich jetzt rootType Klassendefinition an. Hier haben wir zwei Eigenschaften foos und bars. Sie werden für fooType[] und barType[] Arrays wie Wurzel Elemente serialisiert werden:

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

Aber das ist nicht das, was ich will. Wie man sie nach XSD und Beispiel am Anfang dieses Beitrags serialisiert?

Antwort

1

Basierend auf Ihren Kriterien würde ich IXmlSerializable auf rootType implementieren. Es gibt eine großartige Lektüre von SO, wie man die XML, nach der Sie suchen, erstellt.

Proper way to implement IXmlSerializable?

1

Ich finde, dass der schnellste Weg zu arbeiten, wie Sie Ihre Klassen zu entwerfen ein bestimmtes Schema passen ist rückwärts das xsd.exe Tool auszuführen. Sagen Sie ihr, dass sie Klassen aus Ihrem Schema generieren und vergleichen Sie sie mit Ihren handgeschriebenen Klassen, um zu sehen, wo Sie schief gelaufen sind. Es ist eine großartige Möglichkeit, Erfahrungen zu sammeln, wie der Serializer funktioniert.