1

私はWebサービスを利用していますが、これはwsdlからのものです。

<xs:complexType name="Person">
    <xs:sequence>          
      <xs:element minOccurs="0" maxOccurs="unbounded" name="PersonAddresses" type="ns:PersonAddress" />
    </xs:sequence>
</xs:complexType>

xsdから:

<!--Complex Type for PersonAddress-->
<xs:complexType name="PersonAddress">
    <xs:sequence>
        <xs:element name="Address" type="Address" minOccurs="0" maxOccurs="1"/>
    </xs:sequence>
</xs:complexType>

<!--Complex Type for Address-->
<xs:complexType name="Address">
    <xs:sequence>
        <xs:element name="Addr1" type="xs:string" minOccurs="0" maxOccurs="1"/>
        <xs:element name="Addr2" type="xs:string" minOccurs="0" maxOccurs="1"/>
        <xs:element name="City" type="xs:string" minOccurs="0" maxOccurs="1"/>
        <xs:element name="State" type="xs:string" minOccurs="0" maxOccurs="1"/>
        <xs:element name="Zip" type="xs:string" minOccurs="0" maxOccurs="1"/>
    </xs:sequence>
</xs:complexType>

生成されたプロキシを使用して、PersonAddressのコレクションを作成し、それにAddressオブジェクトを追加します。

...
var convertedAddresses = new PersonAddress[addressesToCounvert.Count];
for (int i = 0; i < addresses.Count; i++)
{
    convertedAddresses[i] = ConvertAddress(addresses[i]);
}
person.PersonAddresses = convertedAddresses;
...

リクエストを送信すると、次のようになります

<PersonAddress>
    <Address>
        ...
    </Address>
</PersonAddress>
<PersonAddress>
    <Address>
        ...
    </Address>
</PersonAddress>

だから私は何を間違っているのですか..必要な形式は

<PersonAddress>
    <Address>
        ...
    </Address>
    <Address>
        ...
    </Address>
</PersonAddress>

ご入力いただきありがとうございます

4

1 に答える 1

1

私の知る限り、取得する出力はWSDL/XSD定義と一致します。WSDLに基づいて、<Person>要素には複数の<PersonAddress>要素を含めることができます。XSDに基づいて、<PersonAddress>要素には0または1つの要素を含めることができます<Address>。提供された情報を使用した有効な構造は次のとおりです。

<Person>
 <PersonAddress>
  <Address>
    ...
  </Address>
 </PersonAddress>
</Person>
<Person>
 <PersonAddress>
  <Address>
      ...
  </Address>
 </PersonAddress>
 <PersonAddress>
  <Address>
      ...
  </Address>
 <PersonAddress>
</Person>

のスペルに矛盾があることにも注意してください<PersonAddress>。指定したWSDLコードでは、<Person>要素は0から多数の<PersonAddresses>要素を含むように定義されています(「アドレス」の複数形に注意してください)。この回答の目的上、これは単なるタイプミスであり、実際にはWSDLのように<PersonAddresses>綴られているはずだと思いました。<PersonAddress>問題が単に間違ったオブジェクトを使用していることである場合に備えて、これを必ず指摘したいと思います(つまり、 1対多の要素<PersonAddresses>を許可する複合型がある可能性があります)<Address>

于 2012-12-14T20:52:22.037 に答える