2016-05-17 5 views
2

私はXSDとシリアライゼーションのデシリアライゼーションにかなり慣れています。私は作成した結果のクラスオブジェクトを初期化する方法についていくつかアドバイスをしていますここでXSDとObjectクラスに関するいくつかの情報を始めます。XSD.exe - xs:choiceから作成した型を初期化する方法

より大きいXSDオブジェクトクラスの例を示します。

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では作成したオブジェクトクラス:私はこだわっている

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

ので、私は 'Maincontact' 要素を初期化することができ、それはサブ要素があります正確にどのようです私はこのクラスを初期化することでこの点に着目しています:

export.design = new exportDesign 
{ 
    commission = new exportDesignCommission 
    { 
     dateofcreation = DateTime.Now, 
     dateoflastchange = DateTime.Now, 
     customer = new exportDesignCommissionCustomer 
     { 
      maincontact = new exportDesignCommissionCustomerMaincontact 
      { 
       //Initialisation in question to go here 
      } 
     } 
    }, 
}; 

かなり基本的ですが、私はこの初期化がXSDの選択を反映する条件付き選択に基づいてどのように動作するかを見ることができません。誰かが私を正しい方向に向けることができますか? xsdからコードを生成するためのここまでを読むため再び

おかげと感謝:)

答えて

1

すべてのツールは完全ではなく、複雑なのXSDのために自分でいくつかのコードを追加する必要があります。 xsd2codeのカスタマイズ性のため、あなたにはお勧めします。

Look at that blogここにSimon Middlemissがあなたの質問に答えています。

+1

ありがとう、私は生成されたXSDオブジェクトクラスを変更し、すべて正常に動作します。私は公正な少数の開発者がこの欲求不満を持っていたことを恐れるので、私はここにフォローアップを掲示します。 –

関連する問題