手動のシリアライゼーション/デシリアライゼーションを使用して、コントローラー アクションへの jquery 呼び出しのサンプルがあります。複雑なオブジェクトをうまくやり取りできます。しかし、「自動」デシリアライゼーションを使用する同じコードは、オブジェクトの外側部分のみを送信し、内側は null を送信します。
これはバグですか?..大きすぎると思います.MVCに「期待されていたことをしてください」と伝えるために何かを設定する必要がありますか?. これが機能するコード、機能しないコードです。
動作するコード: Javascript: var modelListData = { "listname": "xname", "samplemodels": [{ "name": "pepe1" }, { "name": "pepe2" }, { "name": "pepe3 " }, { "名前": "pepe4" }]};
$.ajax({
url: "http://localhost:1629/Sample/MyTestMethod5",
method: 'POST',
data: { "sampleModelListJson": JSON.stringify(modelListData) },
success: processGetJSONList,
error: function (data) { alert("error" + data); }
});
コントローラーのアクション:
public ActionResult MyTestMethod5(string sampleModelListJson)
{
SampleModelList inputModelList = JsonConvert.DeserializeObject<SampleModelList>(sampleModelListJson);
SampleModelList outputModelList = new SampleModelList();
outputModelList.listname = inputModelList.listname + "xxx";
outputModelList.samplemodels = inputModelList.samplemodels;
return Json(outputModelList, JsonRequestBehavior.AllowGet);
}
動作しないコード:
Javascript:
$.ajax({
url: "http://localhost:1629/Sample/MyTestMethod6",
method: 'POST',
data: modelListData, //reusing previous one
success: processGetJSONList,
error: function (data) { alert("error" + data); }
});
コントローラーのアクション:
public ActionResult MyTestMethod6(SampleModelList sampleModelList)
{
SampleModelList outputModelList = new SampleModelList();
outputModelList.listname = sampleModelList.listname + "xxx";
outputModelList.samplemodels = sampleModelList.samplemodels;
return Json(outputModelList, JsonRequestBehavior.AllowGet);
}