如何使用嵌套列表反序列化 Json
How to deserialize Json with nested lists
这不是我第一次将 Json 反序列化为 c# 类,但是当这些 Json 具有嵌套列表时我遇到了一些麻烦。这是返回的 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; }
}
和任务实例
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 或至少在我尝试访问它时抛出空引用异常.
我之前搜索过其他主题,但 none 的解决方案似乎有效。我不确定我错过了什么。谢谢你的帮助。
免责声明:
data in JObject.Parse(data["data"] 看起来像这样:
{
"data": {
"workOrderInstances": [
{
"_id": "5cacdda0b4e6d128a61187ca",
"taskInstance": [
{
"_id": "5cacdda0b4e6d128a61187cc"
}
],
"isRunning": false
},
...
]
}
}
使用这个模型:
因为你模型的问题是:
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; }
}
让我知道它是否适合你。
这不是我第一次将 Json 反序列化为 c# 类,但是当这些 Json 具有嵌套列表时我遇到了一些麻烦。这是返回的 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; }
}
和任务实例
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 或至少在我尝试访问它时抛出空引用异常.
我之前搜索过其他主题,但 none 的解决方案似乎有效。我不确定我错过了什么。谢谢你的帮助。
免责声明: data in JObject.Parse(data["data"] 看起来像这样:
{
"data": {
"workOrderInstances": [
{
"_id": "5cacdda0b4e6d128a61187ca",
"taskInstance": [
{
"_id": "5cacdda0b4e6d128a61187cc"
}
],
"isRunning": false
},
...
]
}
}
使用这个模型:
因为你模型的问题是: 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; }
}
让我知道它是否适合你。