WSDL网络服务从C#返回空数组

4
我正在使用一个网络服务,其地址为: https://api.n11.com/ws/CityService.wsdl 该服务有一个名为“GetCities”的方法。您可以使用http://wsdlbrowser.com/进行测试。
问题在于,当我从C#获取城市信息时,它返回81个元素的数组,但“cityId”和“cityName”为空。

enter image description here

请帮忙!

我的代码如下:

        GetCitiesRequest request = new GetCitiesRequest();
        CityServicePortClient port = new CityServicePortClient();

        GetCitiesResponse getCitiesResponse = port.GetCities(request);

        var list = getCitiesResponse.cities;

你能展示一下你的代码吗? - Salah Akbari
我遇到了同样的问题。我们的响应中有一个空属性,但在我们收到的wsdl中没有显示,这导致了错误的排序。 - Herschel Jansen
2个回答

6

明白了!

Visual Studio会搞乱XmlElementAttribute上的Order参数,所以在您的References.cs文件中,请更改如下内容:

[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)]
public long cityId 

to

[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=1)]
public long cityId 

并且。
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=1)]
public string cityCode

转换为

[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)]
public string cityCode

谢谢,它管用。但是Order参数是什么? - Kemal Duran
这是XML响应中字段的顺序,反序列化需要它。原本期望返回<cityId>1</cityId><cityCode>123</cityCode>,但实际返回的是<cityCode>123</cityCode><cityId>1</cityId>,因此必须交换这两个字段之间的顺序。 - Anderson Pimentel

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接