我正在编写一个在客户端和服务器之间传输 JSON 的 ASP.NET Web 应用程序。我几乎完成了一切,除了我似乎无法从客户端将 JSON 传输到 ASMX 并将其解释为除了Dictionary<string>
在服务器端,我有
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
[ScriptService]
public class WebService1: System.Web.Services.WebService
{
[WebMethod(EnableSession = true)]
public bool SaveExpression(ExpressionStructure Expression) {
return true;
}
}
在客户端,我使用 发送数据$.ajax()
,其中是客户端之前收到expressionObject.expression
的 .NET 类的对象:ExpressionStructure
var dataSubmit = { Expression: expressionObject.expression };
$.ajax({
url: "WebService.asmx/SaveExpression",
contentType: "application/json; charset=utf-8",
dataType: "json",
type: 'POST',
data: JSON.stringify(dataSubmit),
success: function (msg) {
alert(msg.d);
},
error: function (obj, status, msg) { ajaxServerError(obj, status, msg); }
});
当SaveExpression
方法接受Object
时,我得到一个字符串字典。当我使用ExpressionStructure
时,我得到一个500 Internal Server Error
.
发送的表达式是从这个 MVC3 控制器方法接收到的内容的未修改版本。
public ActionResult Expression(int ExpressionID) {
ExpressionStructure es = GetExpressionFromDatabase(ExpressionID);
return new JsonResult {
Data = new {
expression = es,
view = this.RenderPartialView("_Expression_Statement", es)
},
JsonRequestBehavior = System.Web.Mvc.JsonRequestBehavior.AllowGet
};
}
表达式本身如下所示:
{
"Expression":
{
"Name":"Status Desc",
"Type":0,
"Statement":
{
"FormulaItem":
{
"Type":"Replace",
"Parameters":
[
{
"Type":"Char",
"Value":
{
"Value":"[Status]"
},
"Source":"picker"
},
{
"Type":"input",
"Value":
{
"Value":"0,1,2;Home,Driving,Away"
},
"Source":"inputBox"
}
]
}
}
}
}
我尝试将 ASMX 方法更改为 take string
,ExpressionStructure
但都返回一个500 Internal Server Error
. 我还尝试修改来自客户端的 JSON,进行各种包装(包括"Expression"
用方括号包装最外层)。
我遗漏了哪些关键元素阻止 ASMX 正确获取 JSON 并获取ExpressionStructure
? 或者,我怎样才能直接或从字典中获取字符串,以便手动执行 JSON 转换(我不想这样做)?