2012-08-27 13 views
8

Ho avuto uno strano comportamento con il generatore XSD che non so spiegare. Ho ottenuto un XSD come questo:Lo strumento XSD aggiunge "Specificato" a determinate proprietà/campi durante la generazione del codice C#

<xs:complexType name="StageSequenceElement" mixed="false"> 
    <xs:complexContent> 
     <xs:extension base="CoreObject"> 
      <xs:sequence> 
       <xs:element name="Description" type="xs:string" minOccurs="0"> 
        <xs:annotation> 
         <xs:documentation>Some Doc</xs:documentation> 
        </xs:annotation> 
       </xs:element> 
       <xs:element name="StageRef" type="ObjectReference"> 
        <xs:annotation> 
         <xs:documentation>...</xs:documentation> 
        </xs:annotation> 
       </xs:element> 
       <xs:element name="MinDuration_100ms" type="xs:int" nillable="true" minOccurs="0"> 
        <xs:annotation> 
         <xs:documentation>...</xs:documentation> 
        </xs:annotation> 
       </xs:element> 
       <xs:element name="MaxDuration_100ms" type="xs:int" nillable="true"> 
        <xs:annotation> 
         <xs:documentation>...</xs:documentation> 
        </xs:annotation> 
       </xs:element> 
       <xs:element name="StageOnDemand" type="xs:boolean" nillable="true" minOccurs="0"> 
        <xs:annotation> 
         <xs:documentation>...</xs:documentation> 
        </xs:annotation> 
       </xs:element> 
      </xs:sequence> 
     </xs:extension> 
    </xs:complexContent> 
</xs:complexType> 

è derivato da CoreObject:

<xs:complexType name="CoreObject"> 
    <xs:sequence> 
     <xs:element name="No" type="xs:int"> 
      <xs:annotation> 
       <xs:documentation>...</xs:documentation> 
      </xs:annotation> 
     </xs:element> 
    </xs:sequence> 
</xs:complexType> 

Questa è solo una piccola parte del XSD, ci sono un sacco tipi più complessi.

Così, quando ho generare le classi simili a this, ho una classe generata che ha più di due proprietà (oltre al 5, che mi aspetterei):

public bool MinDuration_100msSpecified 

e

public bool StageOnDemandSpecified 

Quindi alla proprietà "originale" è stato aggiunto "Specificato" e il tipo è ora bool. Qualcuno può spiegare perché è così?

risposta

9

l'attributo bool indica che l'attributo correlato deve essere serializzato.

ad es.

Se il boolMinDuration_100msSpecified è impostato su false, e si imposta il MinDuration_100ms essere 300, quando si utilizza XmlSerializer per serializzare l'oggetto, l'attributo MinDuration_100ms non verrà serializzato.

Questa funzione può salvare il file xml serializzato in modo che sia minimo.

+3

Grazie, c'è un modo per impedire la creazione di quella proprietà? – derape

+1

Puoi provare gli strumenti xsd2code, che offrono più funzioni. http://xsd2code.codeplex.com/ –

+0

Bene, abbiamo finito con un codice da noi stessi che si adatta alle nostre esigenze, ma grazie comunque :-) – derape

2

Set minOccurs = "1" dove l'elemento è nillabile. Ad esempio:

<xs:element name="StageOnDemand" type="xs:boolean" nillable="true" minOccurs="1" /> 
+2

Ciò cambierebbe il significato semantico che non volevamo: 'null' e empty non è lo stesso ... – derape