【发布时间】:2019-01-05 19:22:05
【问题描述】:
我将带有 ajax 表单数据的 JSON 对象传递给控制器。我尝试将其反序列化为对象,但它始终返回 null。我只能将其转换为动态,但不能将动态转换为 Category 类。
public class CategoryVM
{
public Category category { get; set; }
public CategoryImage categoryImage { get; set; }
public CategoryVM()
{
category = new Category();
categoryImage = new CategoryImage();
}
}
类别类
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));
【问题讨论】:
-
那是因为你的 json 和你的对象不匹配。您的 json 清楚地指定您有一个具有属性
cat的对象,并且在此属性内是另一个具有您的Category属性的对象,并且在此属性内您有一个具有您添加到类别类的 3 个属性的对象。基本上,您缺少围绕它的几个级别的对象。尝试将其反序列化为Dictionary<string, Dictionary<string, Category>>,如果这给了你一些东西,请查看"cat"键和它的字典,以及Category键和它在该字典中的值。 -
@LasseVågsætherKarlsen 我想缩短这里的代码。我更新了我的问题。我已经尝试过 CategoryVM 类,但结果是一样的。
-
试试
Dictionary<string, CategoryVM>。
标签: c# json deserialization json-deserialization