2011-02-15 41 views
2

我收到“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] '“}

我需要做些什么才能做到这一点?

+0

你可以张贴`PageMethods.AddContact`的实施?我认为如果我们确切地知道幕后发生了什么,帮助你会更容易。 – 2011-02-15 19:58:29

+0

为什么不将WebMethod参数声明为ContactHolder []?看起来好像ASP.Net看到一个标量参数(Object),并将JSON字符串转换为.Net字符串。 – devio 2011-02-15 19:58:39

回答

相关问题