json反序列化返回null

我将带有 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));


元芳怎么了
浏览 160回答 2
2回答

千万里不及你

您有一个额外的嵌套级别,{"cat": { /* CategoryVM contents */ }}它没有反映在您的数据模型中。解决此问题的最简单方法是反序列化为具有public CategoryVM cat属性的包装对象,该属性可以是匿名类型对象:var&nbsp;c&nbsp;=&nbsp;JsonConvert.DeserializeAnonymousType(cat,&nbsp;new&nbsp;{&nbsp;cat&nbsp;=&nbsp;default(CategoryVM)&nbsp;}) &nbsp;&nbsp;&nbsp;&nbsp;.cat.category;演示小提琴在这里。

呼如林

你可以这样做,那么你就不需要CategoryVM:var&nbsp;obj&nbsp;=&nbsp;JsonConvert.DeserializeObject<JObject>(json);var&nbsp;category&nbsp;=&nbsp;JsonConvert.DeserializeObject<Category>(obj.First.First["Category"].ToString());
打开App,查看更多内容
随时随地看视频慕课网APP