【问题标题】:json deserialization returns nulljson反序列化返回null
【发布时间】: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&lt;string, Dictionary&lt;string, Category&gt;&gt;,如果这给了你一些东西,请查看"cat" 键和它的字典,以及Category 键和它在该字典中的值。
  • @LasseVågsætherKarlsen 我想缩短这里的代码。我更新了我的问题。我已经尝试过 CategoryVM 类,但结果是一样的。
  • 试试Dictionary&lt;string, CategoryVM&gt;

标签: c# json deserialization json-deserialization


【解决方案1】:

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

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

演示小提琴here.

【讨论】:

    【解决方案2】:

    你可以这样做,那么你就不需要CategoryVM

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多