クライアントとサーバー間でJSONを送信するASP.NETWebアプリケーションを作成しています。クライアントからASMXにJSONを送信して、それを他のものとして解釈させることができないように見えることを除いて、ほぼすべてが完了しています。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メソッドを取るように変更しようとしましたstring
がExpressionStructure
、どちらも。を返します500 Internal Server Error
。また、クライアントからのJSONを変更して、さまざまなラッピング(最も外側"Expression"
の角かっこでのラッピングを含む)を実行してみました。
ASMXがJSONを正しく取得して取得するのを妨げている、欠落している重要な要素は何ExpressionStructure
ですか? オプションで、文字列を直接または辞書から取得して、JSON変換を手動で実行できるようにするにはどうすればよいですか(これは実行したくないです)。