2012-08-27 36 views
8

Mam dziwne zachowanie z generatorem XSD, którego tak naprawdę nie mogę wyjaśnić. Mam XSD takiego:Narzędzie XSD dołącza "Określone" do pewnych właściwości/pól podczas generowania kodu 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> 

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

to tylko niewielka część XSD, są o wiele bardziej złożone typy.

Więc kiedy generowania klas podobne do this, mam wygenerowany klasę, która ma dwa więcej właściwości (oprócz 5, co chciałbym oczekiwać):

public bool MinDuration_100msSpecified 

i

public bool StageOnDemandSpecified 

Tak więc do "pierwotnej" właściwości "Specified" dodano i typ jest teraz bool. Czy ktoś może wyjaśnić, dlaczego tak jest?

Odpowiedz

9

Atrybut bool oznacza, że ​​powiązany atrybut powinien być serializowany.

np.

Jeśli boolMinDuration_100msSpecified jest ustawiony na false i ustawić MinDuration_100ms być 300 podczas korzystania XmlSerializer do serializacji obiektu, atrybut MinDuration_100ms nie zostaną w odcinkach.

Ta funkcja umożliwia zapisanie zserializowanego pliku xml jako minimalnego.

+3

Dzięki, czy istnieje sposób, aby zapobiec stworzeniu tej nieruchomości? – derape

+1

Możesz wypróbować narzędzia xsd2code, które zapewniają więcej funkcji. http://xsd2code.codeplex.com/ –

+0

Cóż, skończyło się na tym, że nasz koder sam w sobie pasuje do naszych potrzeb, ale dzięki to :-) – derape

2

Zestaw minOccurs = "1" gdzie element jest nieważny. Na przykład:

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

To zmieniłoby znaczenie semantyczne, którego nie chcieliśmy: 'null' i empty to nie to samo ... – derape