反序列化 JSON 以 id 作为键的对象结构
Deserialize JSON object structure with ids as keys
我有这个 JSON 由第三方网络服务生成
{
"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 的结构很奇怪,其中每个 "transaction" 都有它的 ID 作为它的名字。抱歉,我不确定正确的术语,但我认为您应该能够理解要点。
public class UserData
{
[JsonProperty("user_data")]
public Dictionary<string, User> Users { get; set; }
}
这在 JSON 中并不是一个特别不寻常的结构。那应该反序列化为 Dictionary<string, User>
:
public class Root
{
[JsonProperty("user_data")]
public Dictionary<string, User> Users { get; set; }
}
然后正常使用JsonConvert.DeserializeObject<Root>
。
请注意我如何使用 JsonProperty
指定名称在 JSON 中的表示方式,同时保持惯用的 .NET 属性 名称 - 我建议您在 User
class 也是。
我有这个 JSON 由第三方网络服务生成
{
"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 的结构很奇怪,其中每个 "transaction" 都有它的 ID 作为它的名字。抱歉,我不确定正确的术语,但我认为您应该能够理解要点。
public class UserData
{
[JsonProperty("user_data")]
public Dictionary<string, User> Users { get; set; }
}
这在 JSON 中并不是一个特别不寻常的结构。那应该反序列化为 Dictionary<string, User>
:
public class Root
{
[JsonProperty("user_data")]
public Dictionary<string, User> Users { get; set; }
}
然后正常使用JsonConvert.DeserializeObject<Root>
。
请注意我如何使用 JsonProperty
指定名称在 JSON 中的表示方式,同时保持惯用的 .NET 属性 名称 - 我建议您在 User
class 也是。