2016-05-17 7 views
2

Ich bin ziemlich neu in der Arbeit mit XSD-und Serialisierung Deserialisierung, ich bin auf der Suche nach einem Ratschlag, wie das resultierende Klassenobjekt von einem erstellt xs: Auswahlelement in der XSD, um hier einige Informationen zur XSD- und Objektklasse zu starten:XSD.exe - Wie initialisiert man einen Typ erstellt von Xs: Wahl

Beispiele aus einer größeren XSD, Objektklasse.

XSD:

<xs:element name="main-contact"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:choice> 
       <xs:element name="person"> 
        <xs:complexType> 
         <xs:group ref="person"/> 
        </xs:complexType> 
       </xs:element> 
       <xs:element name="company"> 
        <xs:complexType> 
         <xs:group ref="company"/> 
        </xs:complexType> 
       </xs:element> 
      </xs:choice> 
      <xs:group ref="contact"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

<xs:group name="person"> 
    <xs:sequence> 
     <xs:element name="title" minOccurs="0"/> 
     <xs:element name="salutation" minOccurs="0"/> 
     <xs:element name="forename" minOccurs="0"/> 
     <xs:element name="surname"> 
     </xs:element> 
     <xs:element name="birthdate" type="xs:date" minOccurs="0"/> 
    </xs:sequence> 
</xs:group> 

<xs:group name="company"> 
<xs:sequence> 
    <xs:element name="name"/> 
    <xs:element name="phone"> 
     <xs:simpleType> 
      <xs:restriction base="xs:string"> 
       <xs:pattern value="[0-9]+"/> 
      </xs:restriction> 
     </xs:simpleType> 
    </xs:element> 
    <xs:element name="fax" minOccurs="0"> 
     <xs:simpleType> 
      <xs:restriction base="xs:string"> 
       <xs:pattern value="[0-9]+"/> 
      </xs:restriction> 
     </xs:simpleType> 
    </xs:element> 
    <xs:element name="e-mail" minOccurs="0"> 
     <xs:simpleType> 
      <xs:restriction base="xs:string"> 
       <xs:pattern value="[a-z | A-Z | 0-9 | . | -][email protected][a-z | A-Z | 0-9 | . | -]+[.][a-z | A-Z | 0-9 | . | -]+"/> 
      </xs:restriction> 
     </xs:simpleType> 
    </xs:element> 
    <xs:element name="website" type="xs:string" minOccurs="0"> 
    </xs:element> 
</xs:sequence> 
</xs:group> 

<xs:group name="contact"> 
<xs:sequence> 
    <xs:element name="phone-private" minOccurs="0" maxOccurs="unbounded"/> 
    <xs:element name="phone-office" minOccurs="0" maxOccurs="unbounded"/> 
    <xs:element name="fax-private" minOccurs="0" maxOccurs="unbounded"/> 
    <xs:element name="fax-office" minOccurs="0" maxOccurs="unbounded"/> 
    <xs:element name="e-mail-private" minOccurs="0" maxOccurs="unbounded"/> 
    <xs:element name="e-mail-office" minOccurs="0" maxOccurs="unbounded"/> 
    <xs:element name="website" minOccurs="0" maxOccurs="unbounded"/> 
</xs:sequence> 
</xs:group> 

XSD.exe erstellt Objektklasse:

[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.33440")] 
[System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] 
public partial class exportDesignCommissionCustomerMaincontact 
{ 

    private object itemField; 

    private object[] phoneprivateField; 

    private object[] phoneofficeField; 

    private object[] faxprivateField; 

    private object[] faxofficeField; 

    private object[] emailprivateField; 

    private object[] emailofficeField; 

    private object[] websiteField; 


    [System.Xml.Serialization.XmlElementAttribute("company", typeof(exportDesignCommissionCustomerMaincontactCompany))] 
    [System.Xml.Serialization.XmlElementAttribute("person", typeof(exportDesignCommissionCustomerMaincontactPerson))] 
    public object Item 
    { 
     get 
     { 
      return this.itemField; 
     } 
     set 
     { 
      this.itemField = value; 
     } 
    } 


    [System.Xml.Serialization.XmlElementAttribute("phone-private")] 
    public object[] phoneprivate 
    { 
     get 
     { 
      return this.phoneprivateField; 
     } 
     set 
     { 
      this.phoneprivateField = value; 
     } 
    } 


    [System.Xml.Serialization.XmlElementAttribute("phone-office")] 
    public object[] phoneoffice 
    { 
     get 
     { 
      return this.phoneofficeField; 
     } 
     set 
     { 
      this.phoneofficeField = value; 
     } 
    } 


    [System.Xml.Serialization.XmlElementAttribute("fax-private")] 
    public object[] faxprivate 
    { 
     get 
     { 
      return this.faxprivateField; 
     } 
     set 
     { 
      this.faxprivateField = value; 
     } 
    } 


    [System.Xml.Serialization.XmlElementAttribute("fax-office")] 
    public object[] faxoffice 
    { 
     get 
     { 
      return this.faxofficeField; 
     } 
     set 
     { 
      this.faxofficeField = value; 
     } 
    } 


    [System.Xml.Serialization.XmlElementAttribute("e-mail-private")] 
    public object[] emailprivate 
    { 
     get 
     { 
      return this.emailprivateField; 
     } 
     set 
     { 
      this.emailprivateField = value; 
     } 
    } 


    [System.Xml.Serialization.XmlElementAttribute("e-mail-office")] 
    public object[] emailoffice 
    { 
     get 
     { 
      return this.emailofficeField; 
     } 
     set 
     { 
      this.emailofficeField = value; 
     } 
    } 


    [System.Xml.Serialization.XmlElementAttribute("website")] 
    public object[] website 
    { 
     get 
     { 
      return this.websiteField; 
     } 
     set 
     { 
      this.websiteField = value; 
     } 
    } 
} 

Wo ich bin stecken ist, wie genau ich das Element 'Maincontact' initialisieren kann und es Unterelemente ist, so Bisher habe ich zu diesem Punkt mit der Initialisierung der Klasse:

Dies kann bin ziemlich einfach, aber ich kann nicht sehen, wie diese Initialisierung funktionieren würde, basierend auf einer bedingten Auswahl, die die XSD-Wahl widerspiegelt. Kann mir jemand in die richtige Richtung zeigen?

Danke und nochmals vielen Dank bis hierher zum Lesen :)

Antwort

1

Alle Werkzeuge für Code von xsd Erzeugung sind nicht perfekt und für komplexe xsd die müssen Sie selbst einen Code hinzuzufügen. Ich empfehle besser für Sie, xsd2code aufgrund seiner Anpassbarkeit zu verwenden.

Look at that blog Hier beantwortet Simon Middlemiss Ihre Frage.

+1

Danke, ich habe die generierte XSD-Objektklasse geändert und alles funktioniert gut. Ich werde hier ein Follow-up veröffentlichen, da ich befürchte, dass einige Dev's diese Frustration hatten. –

Verwandte Themen