用id作为键反序列化JSON对象结构
本文关键字:JSON 对象 结构 反序列化 id | 更新日期: 2023-09-27 18:12:29
我有这个JSON是由第三方web服务生成的
{
"user_data": {
"123456789": {
"transactions_id": 123456789,
"transaction_date": "2015-07-08T18:31:28+01:00",
"reason_type": "REWARD",
"category": "categoryFoo",
"title": "titleFoo",
"description": "",
"reward_quantity": 5,
"reward_name": " foo"
},
"1234567891": {
"transactions_id": 1234567891,
"transaction_date": "2015-07-08T18:33:06+01:00",
"reason_type": "REWARD",
"category": "categoryFoo",
"title": "titleFoo",
"description": "",
"reward_quantity": 5,
"reward_name": " foo"
},
"1234567892": {
"transactions_id": 1234567892,
"transaction_date": "2015-07-08T18:35:00+01:00",
"reason_type": "REWARD",
"category": "categoryFoo",
"title": "titleFoo",
"description": "",
"reward_quantity": 5,
"issuers_name": " foo"
}
}
}
事务的数量将随着每个请求而变化,因此可能一次有3个这样的事务,然后下一次有10个。为了处理不同数量的事务,我理解您需要使用类似于此public List<User> users { get; set; }
的列表,其中用户类似于此
public class User
{
public int transactions_id { get; set; }
public string transaction_date { get; set; }
public string reason_type { get; set; }
public string category { get; set; }
public string title { get; set; }
public string description { get; set; }
public int reward_quantity { get; set; }
public string reward_name { get; set; }
}
然而,我确实认为这将工作,因为JSON的奇怪结构,其中每个"事务"有它的ID作为其名称。对不起,我不确定正确的术语,但我认为你应该能够了解要点。
这在JSON中并不是一个特别特殊的结构。应该反序列化为Dictionary<string, User>
:
public class Root
{
[JsonProperty("user_data")]
public Dictionary<string, User> Users { get; set; }
}
则正常使用JsonConvert.DeserializeObject<Root>
。
请注意我如何使用JsonProperty
来指定如何在JSON中表示名称,同时保持惯用的。net属性名称-我建议您在User
类中也这样做。
public class UserData
{
[JsonProperty("user_data")]
public Dictionary<string, User> Users { get; set; }
}