2012-08-27 2 views
8

Ich habe ein seltsames Verhalten mit dem XSD-Generator kann ich nicht wirklich erklären. Ich habe eine XSD wie folgt aus:XSD-Tool hängt "Angegeben" an bestimmte Eigenschaften/Felder bei der Generierung von C# -Code

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

es von CoreObject abgeleitet:

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

Dies ist nur ein kleiner Teil der XSD, gibt es viel mehr komplexe Typen.

Also, wenn ich die Klassen ähnlich wie this erzeugen, erhalte ich eine generierte Klasse, die zwei weitere Eigenschaften (zusätzlich zu den 5, die ich erwarten würde):

public bool MinDuration_100msSpecified 

und

public bool StageOnDemandSpecified 

Also an die "originale" Eigenschaft "Specified" angehängt und der Typ ist nun bool. Kann jemand erklären, warum das so ist?

Antwort

9

Das Attribut bool bedeutet, dass das zugehörige Attribut serialisiert werden sollte.

z.B.

Wenn die boolMinDuration_100msSpecified-false gesetzt ist, und stellen Sie die MinDuration_100ms300 sein, wenn Sie XmlSerializer, um das Objekt zu serialisieren, die MinDuration_100ms Attribut wird nicht serialisiert werden.

Diese Funktion kann die serialisierte XML-Datei als minimal speichern.

+3

Danke, gibt es eine Möglichkeit, die Erstellung dieser Eigenschaft zu verhindern? – derape

+1

Sie können die xsd2code-Tools ausprobieren, die mehr Funktionen bieten. http://xsd2code.codeplex.com/ –

+0

Nun, wir sind mit einem Code-Code von uns selbst, der unseren Bedürfnissen entspricht, aber trotzdem danke :-) – derape

2

Set minOccurs = "1" wo das Element nillable ist. Zum Beispiel:

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

Das würde die semantische Bedeutung ändern, die wir nicht wollten: 'null' und leer ist nicht dasselbe ... – derape

Verwandte Themen