2016-05-17 2 views
2

Я довольно новичок в работе с сериализацией XSD и сериализации сериализации. Я ищу несколько советов о том, как инициализировать результирующий объект класса, созданный с помощью xs: элемент выбора в 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. Может кто-то указать мне верное направление?

Спасибо и еще раз спасибо за чтение этого далеко :)

ответ

1

Все инструменты для генерации кода из xsd не являются совершенными и сложными XSD Вам необходимо добавить код самостоятельно. Я рекомендую вам использовать xsd2code из-за его настраиваемости.

Look at that blog Здесь Саймон Middlemiss отвечает на ваш вопрос.

+1

Спасибо, я изменил созданный класс объектов XSD и все работает нормально. Я опубликую здесь проследить, так как опасаюсь, что у немногих разработчиков есть это разочарование. –

Смежные вопросы