0

C# と .Net 4.0 の使用

次のような生成されたスキーマがあります。

<xsd:element name="EstimatedDate" minOccurs="0" nillable="true" default="1900-01-01T00:00:00">
  <xsd:complexType>
       <xsd:simpleContent>
           <xsd:extension base="xsd:dateTime">
                <xsd:attribute name="origVal" type="xsd:dateTime" use="optional" />
           </xsd:extension>
       </xsd:simpleContent>
  </xsd:complexType>

オブジェクトを null 値でシリアル化すると、次のようになります。

<EstimatedDate xsi:nil="true" />

しかし、デシリアライゼーションを取得しています。

XML 仕様を見ると、nillable プロパティとデフォルト プロパティが相互に排他的であることがわかりませんが、nillable であるがデフォルト プロパティを持たない他の dateTime XML 型は正しく機能します。

4

2 に答える 2

1

エラー メッセージは、仕様に存在する制約を説明しています。 検証規則: ローカルで有効な要素 (要素) 句 3.3.2 は、xsi:nil=true の場合、固定値があってはならないことを示しています。ただし、私が見る限り、デフォルト値の禁止はありません。そのため、スキーマ プロセッサが過不足を見つけようとしているようです。

スキーマの正しい動作は次のとおりだと思います。要素が空で xsi:nil が存在しないか false の場合は、デフォルト値を使用します。要素が空で xsi:nil が true の場合は、そのままにしておきます。

(Microsoft にこれを修正してもらうか、Saxon に切り替えてみてください...)

于 2011-12-09T09:34:30.087 に答える
1

おそらくこれは、XML スキーマ仕様の混乱を招く領域の 1 つだと思います(興味深いことに、1.1 仕様でさえ、デフォルトと固定の組み合わせを否定しているだけです)。要素が存在し、空である場合に要素のデフォルト値が適用され、nil された要素にコンテンツが含まれてはならないことを考えると、混乱するのは理にかなっています...どちらが null ですか、それともデフォルトですか? 言い換えれば、両方の条件が存在する場合、どちらが優先されますか? デシリアライザーがそこで助けを求めているようなものだと思います...

于 2011-12-09T01:06:19.220 に答える