2012-08-27 9 views
8

Obtuve un comportamiento extraño con el generador XSD que realmente no puedo explicar. Tengo un XSD como esto:La herramienta XSD agrega "Especificado" a ciertas propiedades/campos al generar el código 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> 

se deriva de 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> 

Esto es sólo una pequeña parte de la XSD, hay muchos tipos más complejos.

Así que cuando me generan las clases similares a this, me sale una clase generada que tiene dos propiedades más (además del 5 lo cual esperaría):

public bool MinDuration_100msSpecified 

y

public bool StageOnDemandSpecified 

Por lo tanto, a la propiedad "original" se agregó "Especificado" y el tipo ahora es bool. ¿Alguien puede explicar por qué esto es así?

Respuesta

9

El atributo bool significa que el atributo relacionado debe ser serializado.

por ejemplo

Si el boolMinDuration_100msSpecified se establece en false, y se establece la MinDuration_100ms ser 300, cuando se utiliza XmlSerializer para serializar el objeto, no se puede serializar el atributo MinDuration_100ms.

Esta función puede ahorrar que el archivo xml serializado sea mínimo.

+3

Gracias, ¿hay alguna forma de evitar la creación de esa propiedad? – derape

+1

Puede probar las herramientas xsd2code, que proporcionan más funciones. http://xsd2code.codeplex.com/ –

+0

Bueno, terminamos con un codegen por nosotros mismos que se ajusta a nuestras necesidades, pero gracias de todos modos :-) – derape

2

Conjunto minOccurs = "1" donde el elemento es anulable. Por ejemplo:

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

Eso cambiaría el significado semántico que no queríamos: 'null' y empty no es lo mismo ... – derape

Cuestiones relacionadas