1

Java ベースの Web サービスを使用する .NET Web アプリがあります。Optional という名前のオブジェクトの 1 つには、検索基準フィールドが含まれています。スキーマは次のとおりです。

<xsd:complexType name="Optional">
 <xsd:sequence>
  <xsd:element name="FromAmount" nillable="true" type="xsd:float" minOccurs="0" /> 
  <xsd:element name="ToAmount" nillable="true" type="xsd:float" minOccurs="0" /> 
  <xsd:element name="FromDate" nillable="true" type="xsd:dateTime" minOccurs="0" /> 
  <xsd:element name="ToDate" nillable="true" type="xsd:dateTime" minOccurs="0" /> 
  <xsd:element name="FromCheckNumber" nillable="true" type="xsd:long" minOccurs="0" /> 
  <xsd:element name="ToCheckNumber" nillable="true" type="xsd:long" minOccurs="0" /> 
 </xsd:sequence>
</xsd:complexType>

私が直面している問題は、Web アプリで子要素に値が割り当てられても、子要素がシリアル化されないことです。minOccurs 属性を削除すると、すべて問題ありません。

これらの要素をオプションにして、値が割り当てられたときにシリアル化するにはどうすればよいですか?

よろしくお願いします。

4

3 に答える 3

3

スキーマでオプションとマークされている null 非許容型 (.NET) の .NET WS には、要素が表示されるかどうかを制御する追加の指定されたプロパティが生成されます。非常に厄介なことに、値のセッターは追加の指定されたフラグを設定しないため、これを行う必要があります。

x.ToAmmount = 24.0f;
x.ToAmmountSpecified = true;
// etc for the rest of the poperties
于 2008-11-27T19:26:13.880 に答える
0

このスキーマは、xml ドキュメント タイプを定義しません。「Optional」という名前の複合型の宣言を提供するだけですが、この型への参照はどこにもありません。

定義されている xml ドキュメントには、少なくとも最上位の要素が必要です。この最上位要素は、どこか (グローバル スコープ) で定義する必要があります。提供されたスキーマにはそのような定義はありません。

提供されているものと似ていますが、xml ドキュメントを定義する xml スキーマの最小限の例は次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<xsd:スキーマ
    elementFormDefault="修飾"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>
  <xsd:element name="オプション" type="オプション"/>
  <xsd:complexType name="オプション">
    <xsd:シーケンス>
      <xsd:element name="FromAmount" nillable="true" type="xsd:float" minOccurs="0" />
      <xsd:element name="ToAmount" nillable="true" type="xsd:float" minOccurs="0" />
      <xsd:element name="FromDate" nillable="true" type="xsd:dateTime" minOccurs="0" />
      <xsd:element name="ToDate" nillable="true" type="xsd:dateTime" minOccurs="0" />
      <xsd:element name="FromCheckNumber" nillable="true" type="xsd:long" minOccurs="0" />
      <xsd:element name="ToCheckNumber" nillable="true" type="xsd:long" minOccurs="0" />
    </xsd:シーケンス>
  </xsd:complexType>
</xsd:スキーマ>

このスキーマに対して正常に検証できる最も単純な xml ドキュメントは、

    <Optional/>

(最上位要素の子はすべてオプションとして定義されているため)。

これが役に立ったことを願っています。

乾杯、

ディミトレ・ノヴァチェフ

于 2008-11-19T04:31:51.643 に答える
0

私の理解では、値が存在しない場合、nillable="true" は値 XML で xsi:nil="true" を生成します。つまり、値が null の場合でも、要素は常に作成されます。

nillable 属性を削除し、minOccurs="0" のままにしてみてください。試していませんが。

于 2008-11-28T14:03:51.317 に答える