次のモデル、ビュー、およびコントローラーがあります。
モデル
public class Person {
public string Name;// { get; set; }
public string Occupation { get; set; }
public int Salary { get; set; }
public int[] NumArr { get; set; }
}
意見
<input type="button" id="Test" value="Test" />
@section Javascript{
<script type="text/javascript">
$(function () {
$("#Test").click(function () {
var data = { Name: "Michael Tom", Occupation: "Programmer", Salary: 8500, NumArr: [2,6,4,9] };
var url = "Home/GetJson";
$.ajax({
url: url,
dataType: "json",
type: "POST",
data: data,
traditional: true,
success: function (result) {
}
});
});
});
</script>
}
コントローラ
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public JsonResult GetJson(Person person) {
return Json(......);
}
}
上記のコードに基づいて、3 つの質問をしたいと思います。
プロパティの代わりに public フィールドを使用すると、シリアライザーは json オブジェクトを C# モデルにシリアル化しないため、コントローラーの "Name" フィールドに対して常に null を取得します。なぜそのようなことが起こるのですか?
NumArr プロパティのタイプを List に変更すると、機能しません。int[] の代わりに List を使用するにはどうすればよいでしょうか? 私はJSから配列を渡していることを知っています。JS からも List を渡すことはできますか?
「traditional: false」ではシリアル化が機能しないため、View の Javascript コード ブロックで「traditional: true」を使用しています。jQuery には 3 つのバージョンの Json シリアライザがあると聞きました。ASP.NET MVC のシリアライザーは古いバージョンのみをサポートしています。本当ですか?
3.1. 本当なら、jQuery の最新バージョンをサポートする MVC のシリアライザーの最新バージョンをいつ入手する予定なのか知りたいです。
3.2. カスタム ビュー エンジンを登録できるように、カスタム Javascript シリアライザーを登録する方法はありますか? 私の友人は、カスタム値プロバイダーまたはカスタム モデル バインダーを登録し、カスタム値プロバイダー/モデル バインダーでカスタム JS シリアライザーを使用できると提案してくれました。
前もって感謝します。私の質問がよくわからない場合は、遠慮なくお知らせください。ありがとう!