如何使用嵌套列表反序列化Json

时间:2019-05-02 09:23:09

标签: c# json json-deserialization

这不是我第一次将Json反序列化为c#类,但是当这些Json具有嵌套列表时,我遇到了一些麻烦。这是workOrders列表的返回Json:

[
  {
    "_id": "5cacdda0b4e6d128a61187ca",
    "taskInstance": [
      {
        "_id": "5cacdda0b4e6d128a61187cc"
      }
    ],
    "isRunning": false
  },
  {
    "_id": "5cacebb0b4e6d128a61187d1",
    "taskInstance": [
      {
        "_id": "5cacebb0b4e6d128a61187d3"
      }
    ],
    "isRunning": false
  }
]

,这里是C#类: 工作订单

public class WorkOrder{
    public string Id { get; set; }
    public List<TaskInstance> TaskInstances { get; set; }
    public string IsRunning { get; set; }
}

和TaskInstance

public class TaskInstance{
    public string Id { get; set; }
}

这是我用来检查结果的代码:

JObject jsonResponse = JObject.Parse(data["data"].ToString());
string workOrderJson = jsonResponse["workOrderInstances"].ToString();
List<WorkOrder> wos = JsonConvert.DeserializeObject<List<WorkOrder>>(workOrderJson);

foreach (WorkOrder wo in wos){
    Debug.Log("WO _id: " + wo.Id);
    Debug.Log("wo.TaskInstances: "+ wo.TaskInstances);
    Debug.Log("WO isRunning: " + wo.IsRunning);
}

当我看到WO._id和WO.isRunning wo.TaskInstances的正确值似乎返回null时,或者每次尝试访问它时,都会抛出null引用异常。

我之前搜索过其他主题,但是所有解决方案似乎都无效。我不确定我缺少什么。谢谢您的帮助。

免责声明: JObject.Parse(data [“ data”] )中的原始 data 看起来像这样:

{
  "data": {
    "workOrderInstances": [
      {
        "_id": "5cacdda0b4e6d128a61187ca",
        "taskInstance": [
          {
            "_id": "5cacdda0b4e6d128a61187cc"
          }
        ],
        "isRunning": false
      },
      ...
     ]
  }
}

1 个答案:

答案 0 :(得分:0)

使用此模型:

因为您的模型存在以下问题: JSON属性名称和模型属性名称在您的代码中不同。

因此,只要您需要在属性使用中使用自己的自定义名称,
       [JsonProperty("JsonPropertyName")]

 public partial class Root
    {
        [JsonProperty("_id")]
        public string Id { get; set; }

        [JsonProperty("taskInstance")]
        public TaskInstance[] TaskInstances { get; set; }

        [JsonProperty("isRunning")]
        public bool IsRunning { get; set; }
    }

    public partial class TaskInstance
    {
        [JsonProperty("_id")]
        public string Id { get; set; }
    }

让我知道它是否对您有用。