Jquery 在webservice中解析JSON并返回值
我正在开发一个Web服务和一个jQuery AJAX。它将获取一个模态对话框,并从模态对话框获取输入,将其放入一个对象中,然后将一个布尔结果从webservice返回给jQueryAjax调用 代码如下:Jquery 在webservice中解析JSON并返回值,jquery,Jquery,我正在开发一个Web服务和一个jQuery AJAX。它将获取一个模态对话框,并从模态对话框获取输入,将其放入一个对象中,然后将一个布尔结果从webservice返回给jQueryAjax调用 代码如下: $('[id*="dialog"]').dialog({ autoOpen: false, modal: true, resizable: false, show: "blind", hide: "puff", buttons: {
$('[id*="dialog"]').dialog({
autoOpen: false,
modal: true,
resizable: false,
show: "blind",
hide: "puff",
buttons: {
'Create': function() {
Materials.MaterialName = $('[id*="txtMaterialName"]').val();
Materials.QuantityType = $('[id*="txtquantity"]').val();
var jsonMaterial = JSON.stringify(Materials);
AddNewMaterial(jsonMaterial);
$(this).dialog('close');
},
'Cancel': function() {
$(this).dialog('close');
}
},
close: function() {
window.document.location = "ResourcePlanningMaster.aspx";
}
});
function AddNewMaterial(materials) {
$.ajax({
type: 'POST',
contentType: "application/json; charset=utf-8",
url: 'Services/Service.asmx/AddNewMaterial',
data: '{"Materials":"' + materials + '"}',
dataType: "json",
success: function(data, textStatus) {
if (textStatus == "success") {
if (data.d == true) {
alert('New Item Added');
}
}
},
error: function(data, textStatus) {
alert('An error has occured retrieving data!');
}
});
}
web服务如下所示:
[WebMethod]
[ScriptMethod]
public String AddNewMaterial(String Materials)
{
Boolean Result = false;
try
{
MaterialEntity Material = JsonConvert.DeserializeObject<MaterialEntity>(Materials);
Result = JsonHelper.InsertMaterial(Material);
}
catch (Exception ex)
{
logger.Error(ex.Message);
logger.Fatal(ex.InnerException);
}
return Result.ToString();
}
现在,当我在web服务中单击“创建”按钮时,我在data.responseText中得到的错误是:
{"Message":"Invalid object passed in, \u0027:\u0027 or \u0027}\u0027 expected. (17): {\"Materials\":\"{\"MaterialName\":\"assd\",\"QuantityType\":\"asd\"}\"}","StackTrace":" at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32 depth)\r\n at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)\r\n at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)\r\n at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)\r\n at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input)\r\n at System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext context, JavaScriptSerializer serializer)\r\n at System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData, HttpContext context)\r\n at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.ArgumentException"}
尽管我将其解析为json,然后将其反序列化为MaterialEntity类本身,但为什么我会得到这样的结果?导致此错误的原因是什么?请尝试使用下一个代码
数据:“{”材料“:“+材料+”}”
而不是示例中的数据行(MaterialEntity对象周围没有双引号)
{"Message":"Invalid object passed in, \u0027:\u0027 or \u0027}\u0027 expected. (17): {\"Materials\":\"{\"MaterialName\":\"assd\",\"QuantityType\":\"asd\"}\"}","StackTrace":" at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32 depth)\r\n at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)\r\n at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)\r\n at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)\r\n at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input)\r\n at System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext context, JavaScriptSerializer serializer)\r\n at System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData, HttpContext context)\r\n at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.ArgumentException"}