生成C#代码时,XSD工具将“Specified”附加到某些属性/字段

时间:2012-08-27 08:16:51

标签: c# code-generation xsd.exe

我对XSD生成器有一种奇怪的行为我无法解释。我有这样的XSD:

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

它来自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>

这只是XSD的一小部分,还有更复杂的类型。

因此,当我生成类似于this的类时,我得到一个生成的类,它有两个属性(除了我期望的5个):

public bool MinDuration_100msSpecified

public bool StageOnDemandSpecified

所以对于“原始”属性,附加了“Specified”,类型现在是bool。 谁能解释为什么会这样呢?

2 个答案:

答案 0 :(得分:9)

bool属性表示相关属性应序列化。

<强> e.g。

如果bool MinDuration_100msSpecified设置为false,并且您将MinDuration_100ms设置为300,那么当您使用XmlSerializer时序列化对象,MinDuration_100ms属性不会被序列化。

此功能可以将序列化的xml文件保存为最小。

答案 1 :(得分:2)

设置 minOccurs =&#34; 1&#34; 其中元素是可为空的。 例如:

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