我在 C# 中有一个 asmx 网络服务,其中 webmethodGetKeys()
返回一个List<List<string>>
但是当我通过我的代理在我的 java 客户端中使用网络方法时GetKeys()
的类型是Object[]
.因此,我无法找到访问字符串的方法。理想情况下,我想将 C#List<List<string>>
解析为 ArrayList<String[]>但我愿意接受更简单的解决方案。我需要在 JTable 中显示内容。
任何这方面的帮助或关于我如何以另一种方式解决这个问题的提示将不胜感激。
以下是相关方法:
public class ProgAss5WebService : System.Web.Services.WebService
{
[WebMethod]
public List<List<string>> GetKeys()
{
return dal.GetKeysList();
}
} //End of C# WebService class
public class Controller { //Java client
public void getKeys() {
ArrayList<String[]> rowList = new ArrayList<String[]>();
try {
//This works
Object[] myArr = proxy.getKeys();
//This does not
rowList = proxy.getKeys();
}catch(RemoteException e) {
e.printStackTrace();
}
}
}//End of Controller class
我仍在学习SO的正确方法,所以请告诉我是否需要更多信息并纠正我问题中的任何错误。谢谢!
C# 方法正在后台反序列化和重新序列化。Java不知道List<List<String>>
是什么,所以它把它变成了一个对象列表。然后,强制转换该对象列表。可能有更快/更好的方法来做到这一点,但我不是 Java 专家,这应该足够好:
for (i = 0; i < myArr.length; i++) {
var x = ar[i];
rowList.Add((List<String>)x;
}
我找到了解决问题的方法。我将List更改为C#交错数组,这似乎与Java中的多维数组基本相同。我尝试了使用 C# 多维数组的解决方案,但我收到一个错误消息,其中说不支持多维数组(不幸的是我没有错误 msg 的副本)。 通过正确阅读 Documentaion,我想出了如何使用交错数组,这使得代码非常简单。
public class ProgAss5WebService : System.Web.Services.WebService
{
[WebMethod]
public string[][] GetKeys()
{
return dal.GetKeysList();
}
} //End of C# WebService class
public class Controller { //Java client
public void getKeys() {
ArrayList<String[]> rowList = new ArrayList<String[]>();
try {
//This works
String[][] = proxy.GetKeys(); //Before, the proxy method would be of the wrong type
//Then I parse the 2D string array to an ArrayList<String[]>
for (int rowIndex = 0; rowIndex < stringArr[0].length; rowIndex++) { // loops through the rows of the 2d stringArr
String[] row = new String[stringArr.length];// For each row it creates a new string array containing the values
for (int columnIndex = 0; columnIndex < stringArr.length; columnIndex++) { // loops through the cells of each row
row[columnIndex] = stringArr[columnIndex][rowIndex].toString(); // casts the values of 2d stringArr
}
rowList.add(row); // adds the String[] to the arrayList
}
return rowList;
}
}//End of Controller class