Javascript JSON、AJAX和ASP.NET

Javascript JSON、AJAX和ASP.NET,javascript,c#,jquery,json,ajax,Javascript,C#,Jquery,Json,Ajax,我的客户端文件的jQuery中有一个ajax调用,它将JSON数据发送到服务器端WebMethod。以下代码起作用: 服务器端的WebMethod(C#) 以及ajax调用(jQuery): tl;dr上述代码获取JSON字符串,并在服务器端方法中创建字符串数组 如果我将JSON更改为以下内容,我将如何重写上述WebMethod?“name”不再是上面代码中的字符串数组,而是某个对象的数组,因此WebMethod中的参数类型需要更改,但我不确定是什么 {"name":[{"value":"val

我的客户端文件的jQuery中有一个ajax调用,它将JSON数据发送到服务器端WebMethod。以下代码起作用:

服务器端的WebMethod(C#)

以及ajax调用(jQuery):

tl;dr上述代码获取JSON字符串,并在服务器端方法中创建字符串数组

如果我将JSON更改为以下内容,我将如何重写上述WebMethod?“name”不再是上面代码中的字符串数组,而是某个对象的数组,因此WebMethod中的参数类型需要更改,但我不确定是什么

{"name":[{"value":"val1"},{"value":"val2"}]}
这是我执行ajax请求时在Chrome的网络选项卡上收到的消息和堆栈跟踪:

Message
:
"No parameterless constructor defined for type of 'System.String'."
StackTrace
:
"   at System.Web.Script.Serialization.ObjectConverter.ConvertDictionaryToObject(IDictionary`2 dictionary, Type type, JavaScriptSerializer serializer, Boolean throwOnError, Object& convertedObject)
↵   at System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeInternal(Object o, Type type, JavaScriptSerializer serializer, Boolean throwOnError, Object& convertedObject)
↵   at System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeMain(Object o, Type type, JavaScriptSerializer serializer, Boolean throwOnError, Object& convertedObject)
↵   at System.Web.Script.Serialization.ObjectConverter.AddItemToList(IList oldList, IList newList, Type elementType, JavaScriptSerializer serializer, Boolean throwOnError)
↵   at System.Web.Script.Serialization.ObjectConverter.ConvertListToObject(IList list, Type type, JavaScriptSerializer serializer, Boolean throwOnError, IList& convertedList)
↵   at System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeInternal(Object o, Type type, JavaScriptSerializer serializer, Boolean throwOnError, Object& convertedObject)
↵   at System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeMain(Object o, Type type, JavaScriptSerializer serializer, Boolean throwOnError, Object& convertedObject)
↵   at System.Web.Script.Services.WebServiceMethodData.StrongTypeParameters(IDictionary`2 rawParams)
↵   at System.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams(Object target, IDictionary`2 parameters)
↵   at System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext context, WebServiceMethodData methodData, IDictionary`2 rawParams)
↵   at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)"

如果您想将一个复杂对象发送到您的webmethod,例如
{“value”:“val1”}
,那么您需要创建一个具有与JSON匹配的属性的C#类,以便能够接收数据

因此,在您的情况下,您需要一个数据类,例如:

public class ValueObject
{
    public string Value { get; set; }
}
然后,您需要更改webmethod以接受
ValueObject
的数组:

[System.Web.Services.WebMethod]
public static string GetCurrentTime(ValueObject[] name)
{
    string str = "";
    foreach (var s in name)
    {
        str += s.Value;
    }
    return str;
}

请注意,如果要将paas
{name:[{Value:“val1”}、{Value:“val2”}]}
值创建到web方法,则属性名
值必须与JSON
值中的属性名相匹配,然后创建如下所示的数据模型

 public class Name
    {
        public string value { get; set; }
    }

    public class RootObject
    {
        public List<Name> name { get; set; }
    }

为我工作!谢谢我希望有更好的文档来说明我的问题。问题是什么问题最终导致ajax调用中的参数没有作为字符串发送到服务器端的WebMethod。ajax调用数据字段中的JSON字符串实际上被转换为WebMethod签名指定的对象类型。话虽如此,我的问题是数据不是作为字符串传递到WebMethod,而是另一种对象类型。您的解决方案非常接近。但最终,我标记为解决方案的答案起了作用。我用你的数据测试了我的代码,它运行良好。我完全按照你发布的方式复制了你的代码,但它不起作用。我从工作解决方案中复制了代码,它成功了。
[System.Web.Services.WebMethod]
public static string GetCurrentTime(ValueObject[] name)
{
    string str = "";
    foreach (var s in name)
    {
        str += s.Value;
    }
    return str;
}
 public class Name
    {
        public string value { get; set; }
    }

    public class RootObject
    {
        public List<Name> name { get; set; }
    }
[WebMethod]
[ScriptMethod]
public static string GetCurrentTime(RootObject list)
{
    string str = "";
    foreach (var s in list.name)
    {
        str += s.Value;
    }
    return str;
}