json 反序列化 returns 空
json deserialization returns null
我将带有 ajax 表单数据的 JSON 对象传递给控制器。我尝试将它反序列化为对象,但它总是 returns null。我只能将其转换为动态,但无法将动态转换为类别 class。
public class CategoryVM
{
public Category category { get; set; }
public CategoryImage categoryImage { get; set; }
public CategoryVM()
{
category = new Category();
categoryImage = new CategoryImage();
}
}
类别class
public class Category
{
public string Kategori { get; set; }
public string Kodu { get; set; }
public bool State { get; set; }
}
JSON 值:
{
"cat": {
"Category": {
"Kategori": "xxx",
"Kodu": "yyy",
"State": "true"
}
}
}
控制器:
[HttpPost]
public ActionResult AddCat(string cat)
{
dynamic json = Newtonsoft.Json.JsonConvert.DeserializeObject(cat);
CategoryVM c = JsonConvert.DeserializeObject<CategoryVM >(JsonConvert.SerializeObject(json)); //converts null here
return View();
}
我也试过 JsonConvert,但对我不起作用:
CategoryVM c = JsonConvert.DeserializeObject<CategoryVM>(JsonConvert.SerializeObject(json));
您有一个额外的嵌套级别 {"cat": { /* CategoryVM contents */ }}
,但未反映在您的数据模型中。解决这个问题的最简单方法是反序列化为带有 public CategoryVM cat
属性 的包装器对象,它可以是 anonymous type object:
var c = JsonConvert.DeserializeAnonymousType(cat, new { cat = default(CategoryVM) })
.cat.category;
演示 fiddle here.
你可以这样做,那么你就不需要CategoryVM
:
var obj = JsonConvert.DeserializeObject<JObject>(json);
var category = JsonConvert.DeserializeObject<Category>(obj.First.First["Category"].ToString());
我将带有 ajax 表单数据的 JSON 对象传递给控制器。我尝试将它反序列化为对象,但它总是 returns null。我只能将其转换为动态,但无法将动态转换为类别 class。
public class CategoryVM
{
public Category category { get; set; }
public CategoryImage categoryImage { get; set; }
public CategoryVM()
{
category = new Category();
categoryImage = new CategoryImage();
}
}
类别class
public class Category
{
public string Kategori { get; set; }
public string Kodu { get; set; }
public bool State { get; set; }
}
JSON 值:
{
"cat": {
"Category": {
"Kategori": "xxx",
"Kodu": "yyy",
"State": "true"
}
}
}
控制器:
[HttpPost]
public ActionResult AddCat(string cat)
{
dynamic json = Newtonsoft.Json.JsonConvert.DeserializeObject(cat);
CategoryVM c = JsonConvert.DeserializeObject<CategoryVM >(JsonConvert.SerializeObject(json)); //converts null here
return View();
}
我也试过 JsonConvert,但对我不起作用:
CategoryVM c = JsonConvert.DeserializeObject<CategoryVM>(JsonConvert.SerializeObject(json));
您有一个额外的嵌套级别 {"cat": { /* CategoryVM contents */ }}
,但未反映在您的数据模型中。解决这个问题的最简单方法是反序列化为带有 public CategoryVM cat
属性 的包装器对象,它可以是 anonymous type object:
var c = JsonConvert.DeserializeAnonymousType(cat, new { cat = default(CategoryVM) })
.cat.category;
演示 fiddle here.
你可以这样做,那么你就不需要CategoryVM
:
var obj = JsonConvert.DeserializeObject<JObject>(json);
var category = JsonConvert.DeserializeObject<Category>(obj.First.First["Category"].ToString());