嵌套 json 反序列化 - 需要另一双眼睛
nested json deserialization - need another set of eyes
我一直在尝试让这个 json 反序列化两天,现在使用 RestSharp。我浏览了 RestSharp github 站点,查看了无数示例,并在 Stack Overflow 上花了很多时间试图找到无济于事的答案。我的代码之前运行良好,但供应商更改了他们的 API 版本,我被迫进行更新以继续将该应用程序用于我的法律实践。我的 json 如下(客户端信息已被删除并替换为通用信息):
{
"data":[
{
"id":1035117666,
"client":
{
"id":905422394,
"name":"client1"
},
"display_number":"11-00012",
"description":"General",
"practice_area":
{
"id":4269978,
"name":"Business"
},
"status":"Open",
"open_date":"2011-12-14",
"close_date":null,
"billing_method":"hourly"
},
{
"id":1035117768,
"client":
{
"id":905422506,
"name":"client2"
},
"display_number":"12-00037",
"description":"HOA",
"practice_area":
{
"id":4269978,
"name":"Business"
},
"status":"Open",
"open_date":"2012-08-07",
"close_date":null,
"billing_method":"hourly"
}
],
"meta":
{
"paging":
{
"next":"https://app.goclio.com/api/v4/matters.json?fields=id%2C+client%7Bid%2C+name%7D%2C+display_number%2C+description%2C+practice_area%7Bid%2C+name%7D%2C+status%2C+open_date%2C+close_date%2C+billing_method&limit=2&page_token=BAh7BjoLb2Zmc2V0aQc%3D--b1ea3eba20c8acefbcdfc7868debd1e0ee630c64&status=Open"
},
"records":91
}
}
我在我的 C# 代码中构建了以下架构:
public class MatterList
{
public List<Matter> matters { get; set; }
public Meta meta { get; set; }
}
public class Meta
{
public Paging paging { get; set; }
public int records { get; set; }
}
public class Paging
{
public string previous { get; set; }
public string next { get; set; }
}
[DeserializeAs(Name = "data")]
public class Matter
{
public int id { get; set; }
public Client client { get; set; }
public string display_number { get; set; }
public string description { get; set; }
public PracticeArea practice_area { get; set; }
public string status { get; set; }
public DateTime open_date { get; set; }
public DateTime close_date { get; set; }
public string billing_method { get; set; }
public string type = "matter";
}
public class PracticeArea
{
public int id { get; set; }
public string name { get; set; }
}
public class Client
{
public int id { get; set; }
public string name { get; set; }
}
当我 运行 RestSharp 反序列化方法时,我使用以下代码行将结果发送到 MatterList 类型的对象
MatterList matterList = jsonHandler.Deserialize<MatterList>(response);
到目前为止,我已经尝试在没有 Meta 或 Paging POCO classes 的情况下进行反序列化,并伴随对 MatterList class 的更改(取出 Meta 属性)。
我尝试过使用和不使用 [DeserializeAs(Name="data")] 指令。
我已尝试在反序列化之前设置 json 响应的 RootElement。
我已经尝试 shorthand 将反序列化与执行请求代码结合起来
IRestResponse<MatterList> matterList = client.Execute<MatterList>(request);
我创建了一个名为 MatterContainer 的容器 class,我将其放置在 MatterList 和 Matter class 模式之间:
public class MatterList
{
public List<MatterContainer> matters { get; set; }
}
public class MatterContainer
{
public Matter matter { get; set; }
}
public class Matter
{
public int id { get; set; }
public Client client { get; set; }
public string display_number { get; set; }
public string description { get; set; }
public PracticeArea practice_area { get; set; }
public string status { get; set; }
public DateTime open_date { get; set; }
public DateTime close_date { get; set; }
public string billing_method { get; set; }
public string type = "matter";
}
我知道我从服务器正确地得到了 json 响应,所以我的请求是正确的,反序列化后 MatterList 不为空。问题是我无法进行反序列化以实际填充 MatterList class.
中的 List 事项
我断断续续看了两天,就是过不了这个坎。如果有人看到我做错了什么,我将不胜感激,我正处于无法进一步推进申请的地步。
谢谢!
我 认为 你的 [DeserializeAs(Name = "data")]
属性放错了地方。尝试将它放在根 class 中:
public class MatterList
{
[DeserializeAs(Name = "data")]
public List<Matter> matters { get; set; }
public Meta meta { get; set; }
}
或者,尝试将 属性 重命名为 data
我一直在尝试让这个 json 反序列化两天,现在使用 RestSharp。我浏览了 RestSharp github 站点,查看了无数示例,并在 Stack Overflow 上花了很多时间试图找到无济于事的答案。我的代码之前运行良好,但供应商更改了他们的 API 版本,我被迫进行更新以继续将该应用程序用于我的法律实践。我的 json 如下(客户端信息已被删除并替换为通用信息):
{
"data":[
{
"id":1035117666,
"client":
{
"id":905422394,
"name":"client1"
},
"display_number":"11-00012",
"description":"General",
"practice_area":
{
"id":4269978,
"name":"Business"
},
"status":"Open",
"open_date":"2011-12-14",
"close_date":null,
"billing_method":"hourly"
},
{
"id":1035117768,
"client":
{
"id":905422506,
"name":"client2"
},
"display_number":"12-00037",
"description":"HOA",
"practice_area":
{
"id":4269978,
"name":"Business"
},
"status":"Open",
"open_date":"2012-08-07",
"close_date":null,
"billing_method":"hourly"
}
],
"meta":
{
"paging":
{
"next":"https://app.goclio.com/api/v4/matters.json?fields=id%2C+client%7Bid%2C+name%7D%2C+display_number%2C+description%2C+practice_area%7Bid%2C+name%7D%2C+status%2C+open_date%2C+close_date%2C+billing_method&limit=2&page_token=BAh7BjoLb2Zmc2V0aQc%3D--b1ea3eba20c8acefbcdfc7868debd1e0ee630c64&status=Open"
},
"records":91
}
}
我在我的 C# 代码中构建了以下架构:
public class MatterList
{
public List<Matter> matters { get; set; }
public Meta meta { get; set; }
}
public class Meta
{
public Paging paging { get; set; }
public int records { get; set; }
}
public class Paging
{
public string previous { get; set; }
public string next { get; set; }
}
[DeserializeAs(Name = "data")]
public class Matter
{
public int id { get; set; }
public Client client { get; set; }
public string display_number { get; set; }
public string description { get; set; }
public PracticeArea practice_area { get; set; }
public string status { get; set; }
public DateTime open_date { get; set; }
public DateTime close_date { get; set; }
public string billing_method { get; set; }
public string type = "matter";
}
public class PracticeArea
{
public int id { get; set; }
public string name { get; set; }
}
public class Client
{
public int id { get; set; }
public string name { get; set; }
}
当我 运行 RestSharp 反序列化方法时,我使用以下代码行将结果发送到 MatterList 类型的对象
MatterList matterList = jsonHandler.Deserialize<MatterList>(response);
到目前为止,我已经尝试在没有 Meta 或 Paging POCO classes 的情况下进行反序列化,并伴随对 MatterList class 的更改(取出 Meta 属性)。
我尝试过使用和不使用 [DeserializeAs(Name="data")] 指令。
我已尝试在反序列化之前设置 json 响应的 RootElement。
我已经尝试 shorthand 将反序列化与执行请求代码结合起来
IRestResponse<MatterList> matterList = client.Execute<MatterList>(request);
我创建了一个名为 MatterContainer 的容器 class,我将其放置在 MatterList 和 Matter class 模式之间:
public class MatterList
{
public List<MatterContainer> matters { get; set; }
}
public class MatterContainer
{
public Matter matter { get; set; }
}
public class Matter
{
public int id { get; set; }
public Client client { get; set; }
public string display_number { get; set; }
public string description { get; set; }
public PracticeArea practice_area { get; set; }
public string status { get; set; }
public DateTime open_date { get; set; }
public DateTime close_date { get; set; }
public string billing_method { get; set; }
public string type = "matter";
}
我知道我从服务器正确地得到了 json 响应,所以我的请求是正确的,反序列化后 MatterList 不为空。问题是我无法进行反序列化以实际填充 MatterList class.
中的 List 事项我断断续续看了两天,就是过不了这个坎。如果有人看到我做错了什么,我将不胜感激,我正处于无法进一步推进申请的地步。
谢谢!
我 认为 你的 [DeserializeAs(Name = "data")]
属性放错了地方。尝试将它放在根 class 中:
public class MatterList
{
[DeserializeAs(Name = "data")]
public List<Matter> matters { get; set; }
public Meta meta { get; set; }
}
或者,尝试将 属性 重命名为 data