我收到“System.Collections.Generic.List'1 [... + ContactHolder]'类型的System.String类型的对象无法转换错误' “使用jQuery将JSON对象发送到asp.net WebMethod时出错
这是我的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中时,它看起来像这样:”[{\名称\ “:\” 本\ “\ ”地址\“:\ ”俄亥俄\“},{\ ”名称\“:\ ”乔恩\“,\ ”地址\“:\ ”伊利诺伊州\“}]”
调用JavaScriptSerializer()的代码错误。ConvertToType,消息是{“无法将类型System.String的对象转换为类型'System.Collections.Generic.List'1 [... + ContactHolder] '“}
我需要做些什么才能做到这一点?
你可以张贴`PageMethods.AddContact`的实施?我认为如果我们确切地知道幕后发生了什么,帮助你会更容易。 – 2011-02-15 19:58:29
为什么不将WebMethod参数声明为ContactHolder []?看起来好像ASP.Net看到一个标量参数(Object),并将JSON字符串转换为.Net字符串。 – devio 2011-02-15 19:58:39