我有以下模型、视图和控制器。
模型
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(......);
}
}
基于上面的代码,我想问三个问题。
如果我们使用公共字段而不是属性,则序列化程序不会将 json 对象序列化为 C# 模型,因此控制器中的“名称”字段总是为空。为什么会这样?
如果我将 NumArr 属性的类型更改为 List 则它不起作用。我们如何使用 List 而不是 int[]?我知道我正在从 JS 传递数组。我们也可以从 JS 传递 List 吗?
我在 View 的 Javascript 代码块中使用“traditional:true”,因为序列化不适用于“traditional:false”。我听说 jQuery 有三个版本的 Json 序列化器。ASP.NET MVC 的序列化程序仅支持旧版本。这是真的吗?
3.1。如果是真的,我想知道你什么时候能得到支持 jQuery 最新版本的 MVC 序列化器的最新版本。
3.2. 有什么方法可以注册自定义 Javascript 序列化器,就像我们可以注册自定义视图引擎一样?我的朋友建议我可以注册自定义值提供者或自定义模型绑定器,并在我的自定义值提供者/模型绑定器中使用自定义 JS 序列化程序。
提前致谢。如果您不清楚我的问题,请随时告诉我。谢谢!