【发布时间】:2011-06-27 21:13:11
【问题描述】:
我收到“无法将 System.String 类型的对象转换为 'System.Collections.Generic.List'1[...+ContactHolder]' 类型的错误”
这是我的 C# 代码:
public class ContactHolder{
public String Name { get; set; }
public String Address { get; set; }
}
[WebMethod]
public static string AddContact(Object items){
List<ContactHolder> contacts = new JavaScriptSerializer().ConvertToType<List<ContactHolder>>(items);
return String.Format("You added {0} contacts!", contacts.ToString());
}
这是我的 Javascript 代码(注意我的项目中包含了 jquery-1.4.1.js 和 json2.js)
function Test() {
var arr = new Array();
var contact = new Object();
contact.Name = "Ben";
contact.Address = "Ohio";
var contact2 = new Object();
contact.Name = "Jon";
contact.Address = "Illinois";
arr[1] = contact;
arr[2] = contact2;
var DTO = JSON.stringify(arr);
PageMethods.AddContact(DTO, OnMyMethodComplete);}
function OnMyMethodComplete(result, userContext, methodName) {alert(result);}
当我将 DTO 传递给 myPageMethod 时,它看起来像这样:"[{"Name":"Ben","Address":"Ohio"},{"Name":"Jon","Address":"Illinois" }]"
当它作为项目出现在我的 WebMethod 中时,它看起来像这样:"[{\"Name\":\"Ben\",\"Address\":\"Ohio\"},{\"Name\" :\"Jon\",\"地址\":\"伊利诺伊州\"}]"
调用 JavaScriptSerializer().ConvertToType 时出现代码错误,消息为 {"Cannot convert object of System.String' to type 'System.Collections.Generic.List'1[...+ContactHolder]' "}
我需要做什么才能完成这项工作?
【问题讨论】:
-
可以发一下
PageMethods.AddContact的实现吗?如果我们确切地知道幕后发生的事情,我认为为您提供帮助会更容易。 -
为什么不将 WebMethod 参数声明为 ContactHolder[] ?好像 ASP.Net 看到一个标量参数(对象),并将 JSON 字符串转换为 .Net 字符串。
-
@Herberth - 我确实包含了 AddContact 的代码。它位于 C# 代码部分。
-
@Devio - 我试过了,我得到了同样的错误。它只是更改为无法转换为列表。