【问题标题】:How to deserialize JSON using JSON.Net如何使用 JSON.Net 反序列化 JSON
【发布时间】:2015-10-28 04:46:04
【问题描述】:

我有以下 JSON 数据

[
  {
    "Id": "a038ca5f-8ef6-41c1-a610-d76c26517058",
    "MainCategoryName": "Digital",
    "LastPublished": "20130731T15:09:51",
    "SubCategories": [
      {
        "Id": "39e4e9c2-0870-4906-99a4-938bf149a138",
        "SubCategoryName": "Electrical and Electronics",
        "LastPublished": "20130729T11:30:27"
      },
      {
        "Id": "41d23a7d-d70f-4e41-9cd3-ddede6f17370",
        "SubCategoryName": "Information Technology",
        "LastPublished": "20130814T16:55:53"
      },
      {
        "Id": "72d6904c-39be-4cf5-810a-e01e6df2b6a9",
        "SubCategoryName": "Telecommunications",
        "LastPublished": "20141209T15:02:07"
      }
    ]
  },
  {
    "Id": "536d443d-7a77-48b1-9721-0adabd4d11e7",
    "MainCategoryName": "Dining",
    "LastPublished": "20130729T10:38:25",
    "SubCategories": [
      {
        "Id": "e8a6b2af-188e-4143-a30f-15816ba10715",
        "SubCategoryName": "Cafe",
        "LastPublished": "20130828T17:02:23"
      },
      {
        "Id": "7fa05929-01f1-4aa5-bb0a-007bf5d75ca1",
        "SubCategoryName": "Confectionery and Specialty",
        "LastPublished": "20140715T17:16:08"
      },
      {
        "Id": "33470a6a-aa8b-4842-8ce7-57bb0f6c77ac",
        "SubCategoryName": "Delivery",
        "LastPublished": "20140715T17:17:40"
      },
      {
        "Id": "b5919130-5f78-4632-93e2-5bcedf663744",
        "SubCategoryName": "Dessert Bar",
        "LastPublished": "20150424T12:46:20"
      },
      {
        "Id": "e93d9457-f93e-4d23-b412-ffa9996ef8e1",
        "SubCategoryName": "Fast Food",
        "LastPublished": "20140715T17:18:58"
      },
      {
        "Id": "0860e413-f8fc-48aa-a24d-9f8e7eb98abd",
        "SubCategoryName": "Food Kiosk and Takeaway",
        "LastPublished": "20140715T17:19:23"
      },
      {
        "Id": "1188c663-2ea3-42a3-991c-9c9855801265",
        "SubCategoryName": "Foodcourt",
        "LastPublished": "20140715T17:19:31"
      },
      {
        "Id": "3bfbb105-3582-482e-a333-d987dc9bd70c",
        "SubCategoryName": "Pub and Bar and Lounge",
        "LastPublished": "20141027T12:02:42"
      },
      {
        "Id": "ed49e69d-38c6-4ebf-a844-03fab83854f7",
        "SubCategoryName": "Restaurant",
        "LastPublished": "20140715T17:20:02"
      },
      {
        "Id": "d7ae7119-7cd5-47c9-aa22-9094a91ac1bc",
        "SubCategoryName": "Restaurant and Bar",
        "LastPublished": "20140715T17:20:24"
      },
      {
        "Id": "ce0704aa-afcf-49ba-8d73-09ebe1f59624",
        "SubCategoryName": "Restaurant with Live Band",
        "LastPublished": "20140715T17:20:42"
      },
      {
        "Id": "3896e1bb-82aa-4866-a001-3d2c0d6f704b",
        "SubCategoryName": "Quick Bite",
        "LastPublished": "20141027T17:26:49"
      },
      {
        "Id": "e088dbc6-e4c0-4e39-9ba6-7cc46567408a",
        "SubCategoryName": "Asian Delights",
        "LastPublished": "20140715T17:20:50"
      },
      {
        "Id": "f0b6c043-60fc-46d7-b9dd-aa2f9f8a682b",
        "SubCategoryName": "Chinese Cuisine",
        "LastPublished": "20140715T17:16:14"
      },
      {
        "Id": "c4498d9d-b747-401d-a666-3c59819f44b7",
        "SubCategoryName": "Western Delicacies",
        "LastPublished": "20140715T17:16:16"
      }
    ]
  }
]

我为 MainCategory 和 SubCategory 创建了类似的类,如下所示:

public class MainCategory
    {
        string Id { get; set; }
        string MainCategoryName { get; set; }
        string LastPublished { get; set; }
        IList<SubCategory> SubCategories { get; set; }
    }

public class SubCategory
    {
        string Id { get; set; }
        string SubCategoryName { get; set; }
        string LastPublished { get; set; }
    }

当我调用List&lt;MainCategory&gt; mainCategories = JsonConvert.DeserializeObject&lt;List&lt;MainCategory&gt;&gt;(categoryJSON); 时,它确实创建了 2 个 MainCategory 对象,但是里面的所有值都是“null”。我想我已经正确匹配了这个名字,我可以知道是否有专家可以给我一些启示?谢谢。

【问题讨论】:

    标签: .net c#-4.0 json.net


    【解决方案1】:

    得到答案,只需在每个变量中添加 Public 关键字,更新代码如下。

    public class MainCategory
        {
            public string Id { get; set; }
            public string MainCategoryName { get; set; }
            public string LastPublished { get; set; }
            public List<SubCategory> SubCategories { get; set; }
        }
    
    public class SubCategory
        {
            public string Id { get; set; }
            public string SubCategoryName { get; set; }
            public string LastPublished { get; set; }
        }
    

    【讨论】:

      【解决方案2】:

      你的班级结构是正确的。我已经创建了如下的类结构并且它可以工作。

      public class SubCategory
      {
          public string Id { get; set; }
          public string SubCategoryName { get; set; }
          public string LastPublished { get; set; }
      }
      
      public class RootObject
      {
          public string Id { get; set; }
          public string MainCategoryName { get; set; }
          public string LastPublished { get; set; }
          public List<SubCategory> SubCategories { get; set; }
      }
      

      现在使用

      反序列化
      List<RootObject> mainCategories = JsonConvert.DeserializeObject<List<RootObject>>(categoryJSON);
      

      您的类属性中缺少 public 访问修饰符。

      使用http://json2csharp.com/生成的类

      【讨论】:

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