0

手動のシリアライゼーション/デシリアライゼーションを使用して、コントローラー アクションへの 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);
    }
4

0 に答える 0