json反序列化返回null

时间:2019-01-05 19:22:05

标签: c# json deserialization json-deserialization

我将带有ajax formdata的JSON对象传递给Controller。我尝试将其反序列化为对象,但始终返回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));

2 个答案:

答案 0 :(得分:1)

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

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

演示小提琴here

答案 1 :(得分:0)

您可以这样做,然后就不需要CategoryVM

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