我有一个问题,我真的需要以任何方式解决(更改数据类型是一个选项)
假设:
示例:
计划摘要:
IList<string> XMLList = null;
XMLList = new List<string>();
// fill my list up here... mostly just an "array" of xml-based strings
string[] arrayToSend = new string[XMLList.Count];
arrayToSend = XMLList.ToArray<string>();
string results = DataFeedService.ProcessXMLBatch(arrayToSend);
服务代码段:
[WebMethod]
public string ProcessXMLBatch(string[] XMLBatch)
{
// process the xml here...
return "done";
}
问题: 它不认为我在服务中创建的字符串[]是同一种类型 字符串数组。它将它转换为#namename的类型。#servicename.ArrayOfString
此代码目前无法编译。我已经四处寻找传递列表或通用的替代方法,并且我一直在遇到障碍。
答案 0 :(得分:1)
考虑更改您的代码以使用List<string>
而不是IList<string>
(我知道您实际使用的是这些,但是声明您的变量)。 List<T>
类提供了一个明确的ToArray()
函数,该函数比您在代码中使用的Enumerable.ToArray<T>
扩展方法更快。 可能也可以解决您的问题,但我不确定。
此外,您不需要
string[] arrayToSend = new string[XMLList.Count];
将其声明为
string[] arrayToSend;
您已经使用ToArray()
电话进行了分配;不需要事先创建另一个。
编辑为什么不实例化并填充在服务引用名称空间中创建的ArrayOfString
类?它将像List<string>
一样工作(事实上,我相信它继承了它)。将此作为XMLList
的类型,只需将XMLList
变量直接发送到该函数。
答案 1 :(得分:0)
如果您将WebMethod
更改为接受List<string>
而不是string[]
并传递相应的类型,则应该有效。根据我的经验,ASP.NET服务似乎更喜欢这个。
此外,请不要忘记确保您的服务引用是最新的,以便正确创建服务包装类型,以便您的代码与之交互。
您是否尝试过实际创建ArrayOfString
类型并填充它,而不是在调用WebMethod时使用string[]
?