我有一个 json 字符串,我想将它解析到 ASP.NET MVC 控制器并绑定到我的模型。这是我这样做的方式,但它不起作用,因为 action 方法中的 book 参数是null
.
下面是我的 json 字符串:
function parseDAta() {
var jsonString = "{\"book\":[{\"id\":\"01\",\"author\":\"j.k.rowling\",\"price\":250,\"available\":true,\"editions\":[{\"id\":\"001\",\"name\":\"2017\"},{\"id\":\"002\",\"name\":\"2018\"}]},{\"id\":\"02\",\"author\":\"carlsom james\",\"price\":500,\"available\":false,\"editions\":null}]}";
$.ajax({
url: '/book/book',
type: "POST",
dataType: "json",
contentType: "application/json; charset=utf-8",
data: jsonString,
success: function (result) {
console.log('Data received: ');
console.log(result);
}
});
}
下面是我的操作方法:
[HttpPost]
public ActionResult book(model book)
{
return null;
}
下面是我的模型:
public class model
{
public book[] book { get; set; }
}
public class book
{
public string id { get; set; }
public string availabity { get; set; }
public string Author { get; set; }
public int price { get; set; }
public edition[] edition { get; set; }
}
public class edition
{
public string name { get; set; }
public string id { get; set; }
}
的DefaultModelBinder
,因为它希望像这样的有效载荷是无法绑定你的对象:
{"book": {"book":[]}}
所以,json应该是
"{\"book\":{\"book\":[{\"id\":\"01\",\"author\":\"j.k.rowling\",\"price\":250,\"available\":true,\"editions\":[{\"id\":\"001\",\"name\":\"2017\"},{\"id\":\"002\",\"name\":\"2018\"}]},{\"id\":\"02\",\"author\":\"carlsom james\",\"price\":500,\"available\":false,\"editions\":null}]}}";
如果 action 方法是这样的,您创建的 json 将起作用:
public ActionResult book(book[] book)
{
}
为避免这种由于book
s过多而造成的混淆,您可以将 Action 方法的参数更改为:
public ActionResult book(model model)
{
}
和 json 到:
"{\"model\":{\"book\":[{\"id\":\"01\",\"author\":\"j.k.rowling\",\"price\":250,\"available\":true,\"editions\":[{\"id\":\"001\",\"name\":\"2017\"},{\"id\":\"002\",\"name\":\"2018\"}]},{\"id\":\"02\",\"author\":\"carlsom james\",\"price\":500,\"available\":false,\"editions\":null}]}}";
另一种方法是向FromBody
参数添加属性,如下所示:
public ActionResult book([FromBody]model book)
{
}
您需要添加System.Web.Http
引用才能使用此属性。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句