1

我正在使用一个网络服务,我有这个来自 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 集合并向其中添加地址对象。

...
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>元素(注意“地址”的复数形式)。出于此答案的目的,我假设这只是一个错字,并且确实<PersonAddresses>应该像<PersonAddress>WSDL 中那样拼写。我想确保指出这一点,以防问题仅仅是您使用了错误的对象(即,可能有一个<PersonAddresses>复杂类型允许其中包含 1 到多个<Address>元素)

于 2012-12-14T20:52:22.037 回答