13

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 のほんの一部であり、もっと複雑な型がたくさんあります。

したがって、これに似たクラスを生成すると、さらに 2 つのプロパティを持つ生成されたクラスが得られます (予想される 5 つに加えて)。

public bool MinDuration_100msSpecified

public bool StageOnDemandSpecified

そのため、「元の」プロパティに「Specified」が追加され、タイプが bool になりました。なぜそうなのか、誰か説明できますか?

4

2 に答える 2

12

このbool属性は、関連する属性をシリアル化する必要があることを意味します。

例えば

bool MinDuration_100msSpecifiedに設定されていてfalse、 を に設定するMinDuration_100ms300、 を使用XmlSerializerしてオブジェクトをシリアル化しても、MinDuration_100ms属性はシリアル化されません。

この機能により、シリアル化された xml ファイルを最小限に抑えることができます。

于 2012-09-30T00:56:49.543 に答える
2

要素が nillable の場合、minOccurs="1"を設定します。例えば:

<xs:element name="StageOnDemand" type="xs:boolean" nillable="true" minOccurs="1" />
于 2014-12-12T15:18:05.060 に答える