Meine clientseitige Datei hat in ihrer jQuery einen AJAX-Aufruf, der JSON-Daten an eine serverseitige WebMethode sendet. Der folgende Code funktioniert:JSON, AJAX und ASP.NET
WebMethod auf serverseitige (C#)
[System.Web.Services.WebMethod]
public static string GetCurrentTime(string[] name)
{
string str = "";
foreach(string s in name)
{
str += s;
}
return str;
}
und der Ajax-Aufruf (jQuery):
//array = ["a","b","c"]
//data = {'name':["a","b","c"]}
$.ajax({
type: "POST",
url: "schedule.aspx/GetCurrentTime",
data: "{'name':" + JSON.stringify(array) + "}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response){
alert(response.d);
},
complete: function() {
alert("complete");
}
});
tl; dr Der obige Code die JSON nimmt string und erstellt ein Array von Strings in der serverseitigen Methode.
Wie würde ich die obige WebMethode umschreiben, wenn ich die JSON zu den folgenden ändern? "Name" ist nicht länger ein Array von Strings wie im obigen Code, sondern ein Array von einigen Objekten, daher müsste der Parametertyp in der WebMethod geändert werden, aber ich bin mir nicht sicher was.
{"name":[{"value":"val1"},{"value":"val2"}]}
Dies ist die Botschaft und stacktrace ich auf Chrome Registerkarte Netzwerk bin Empfang, wenn ich die Ajax-Anforderung ausführen:
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)"
für mich gearbeitet ändern! Vielen Dank. Ich wünschte, es gäbe eine bessere Dokumentation zu meinem Problem. –