我有一个Java服务,它具有以下方法签名:
@WebMethod(operationName = "getContactList")
public MyListClass getContactList(@WebParam(name = "myList") MyListClass myList) throws IllegalArgumentException {
return myList;
}
public class MyListClass implements Serializable{
List<ContactOD> innerList;
public List<ContactOD> getInnerList() {
if(innerList == null){
innerList = new ArrayList<ContactOD>();
}
return innerList;
}
public void setInnerList(List<ContactOD> innerList) {
this.innerList = innerList;
}
}
当我在C#中为这个Java服务生成代理时,我得到如下方法签名:
public ContactOD[] getContactList(ContactOD[] myList)
我在生成的代理 MyListClass 中看不到包含此 List<ContactOD>
的内容。
我需要对java web服务或C#代代数做什么,所以我可以在代理类中看到这样的方法:
public MyListClass getContactList(MyListClass myList)
非常感谢, 阿德里安娜
答案 0 :(得分:1)
Visual Studio中的代理生成器不会直接将Java List映射到C#List,而是将其视为数组。如果您希望使用Generic集合,那么在C#方面最简单的做法就是在其他地方使用List,然后在使用Web服务方法时创建/从T []创建。
即
List<ContactOD> contacts = new List<ContactOD>();
contacts.Add(New ContactOD("Tim", "0123456789"));
List<ContactOD> returnValue = new List<ContactOD>(ProxyHolder.getContactList(contacts.ToArray());
答案 1 :(得分:0)
生成WCF代理时,您可以选择要使用的集合类型。
在命令行中,相应的选项是/collection:"<type>"
,其中是完全限定的类型名称。
在添加服务参考用户界面中,高级选项下有一个下拉列表。