JSON 反序列化返回 null



我将带有ajax formdata的JSON对象传递给控制器。我尝试将其反序列化为对象,但它总是返回 null。我只能将其转换为动态,但无法将其转换为类别类。

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));

您有一个额外的嵌套{"cat": { /* CategoryVM contents */ }}级别,该级别不会反映在数据模型中。 解决此问题的最简单方法是反序列化为具有 public CategoryVM cat 属性的包装器对象,该对象可以是匿名类型对象:

var c = JsonConvert.DeserializeAnonymousType(cat, new { cat = default(CategoryVM) })
    .cat.category;

演示小提琴在这里。

你可以

这样做,那么你就不需要CategoryVM了:

var obj = JsonConvert.DeserializeObject<JObject>(json);
var category = JsonConvert.DeserializeObject<Category>(obj.First.First["Category"].ToString());

最新更新