【发布时间】:2012-04-16 05:18:23
【问题描述】:
我有以下模型、视图和控制器。
型号
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# 模型,因此控制器中的“名称”字段总是为 null。为什么会这样?
如果我将 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 序列化器。
提前致谢。如果您不清楚我的问题,请随时告诉我。谢谢!
【问题讨论】:
标签: asp.net json asp.net-mvc-3 jquery jsonserializer