我正在編寫一個ASP.NET Web應用程序,在客戶端和服務器之間傳輸JSON。我幾乎樣樣齊全,但我似乎無法從客戶端的JSON到ASMX傳輸並將其解釋爲任何東西,但Dictionary<string>
無法發送JSON到ASMX除了字典<>
在服務器端,我有
[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
甲基od接受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方法採取string
,ExpressionStructure
但都返回一個500 Internal Server Error
。我也嘗試修改來自客戶端的JSON,做各種包裝(包括用方括號包裹最外面的"Expression"
)。
我錯過了什麼關鍵元素,阻止了ASMX正確使用JSON並獲得ExpressionStructure
?(可選)如何直接或從字典中獲取字符串,以便我可以手動執行JSON轉換(我寧願不這樣做)?
如果在從本地主機訪問Web服務時使用像提琴手這樣的工具來跟蹤網絡流量,是否會得到擴展錯誤信息? – Hans 2012-08-09 19:40:21