【问题标题】:Error sending JSON object to asp.net WebMethod, using jQuery使用 jQuery 将 JSON 对象发送到 asp.net WebMethod 时出错
【发布时间】: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 - 我试过了,我得到了同样的错误。它只是更改为无法转换为列表。

标签: .net jquery ajax


【解决方案1】:

【讨论】:

  • 这是正确的。使用 ASP.NET AJAX 服务代理助手方法时,参数在发送前会自动进行 JSON 序列化。如果您直接调用服务而不使用服务代理,则确实 需要调用 JSON.stringify()。例如,如果您使用 jQuery 的 $.ajax()。
  • 谢谢戴夫,我刚刚在类似主题中找到了您的答案并将其链接。
猜你喜欢
  • 2010-11-11
  • 2012-02-24
  • 2016-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-08
  • 1970-01-01
相关资源
最近更新 更多