无法使用字典列表分析JSON数据
本文关键字:JSON 数据 列表 字典 | 更新日期: 2023-09-27 18:21:36
我想将JSON数据解析为C#
数据为:
"{'"data'":
{'"6'":{'"id'":'"6'",'"reward_definition_id'":12,'"person_id'":164305,'"issue_date'":'"2015-10-08'",'"expiry_date'":'"2015-11-08'",'"amount_initial'":20,'"amount_remaining'":0,'"
_member_details'":{'"id'":'"164305'",'"first_name'":'"test'",'"last_name'":'"one'",'"email'":'"testing1@example.com'",'"_email_trigger'":'"Y'",'"_email_bounced'":'"N'",'"_email_promo'":'"Y'",'"_app_notify'":'"Y'",'"_sms_status'":'"Y'",'"active'":'"Y'"},
'"_store_details'":null,'"_staff_details'":null,'"_product_details'":null},
'"5'":{'"id'":'"5'",'"reward_definition_id'":12,'"person_id'":164305,'"issue_date'":'"2015-10-08'",'"expiry_date'":'"2015-11-08'",'"amount_initial'":20,'"amount_remaining'":20,'"
_member_details'":{'"id'":'"164305'",'"first_name'":'"test'",'"last_name'":'"one'",'"email'":'"testing1@example.com'",'"_email_trigger'":'"Y'",'"_email_bounced'":'"N'",'"_email_promo'":'"Y'",'"_app_notify'":'"Y'",'"_sms_status'":'"Y'",'"active'":'"Y'"},
'"_store_details'":null,'"_staff_details'":null,'"_product_details'":null}
}}"
如何创建一个具有该数据列表字典的类,并将其反序列化为C#类。我正在尝试使用以下类来存储这个json数据,这些类是
public class JsonRewardResponse
{
public Dictionary<int, JsonRewardDetails> mydictionary { get; set; }
}
public class JsonRewardDetails
{
public string Id;
public int reward_definition_id;
public int person_id;
public string issue_date;
public string expiry_date;
public int amount_initial;
public int amount_remaining;
public JsonMemberDetails member;`enter code here`
public int _store_details;
public int _staff_details;
public int product_details;
}
public class JsonMemberDetails
{
public string Id;
public string first_name;
public string last_name;
public string email;
public string _email_trigger;
public string _email_bounced;
public string _email_promo;
public string _app_notify;
public string _sms_status;
public string active;
}
请帮忙,提前谢谢。
Bharath AK
您没有说明您正在使用什么序列化程序,因此我给出的建议与所有JSON序列化程序相关。
这里有几个问题:
-
属性
mydictionary
的名称应该是data
,因为这就是JSON中的名称。 -
应将
product_details
重命名为_product_details
。 -
_store_details
、_staff_details
和_product_details
被声明为int
,但是它们在JSON中显示为null
。因此,它们需要是c#中的某种可为null的类型,例如int?
或string
。(这些在JSON中为null的事实表明,但并不能证明,当它们不是null时,它们不是整数类型。) -
member
应重命名为_member_details
。
因此:
public class JsonRewardResponse
{
public Dictionary<int, JsonRewardDetails> data { get; set; }
}
public class JsonRewardDetails
{
public string Id;
public int reward_definition_id;
public int person_id;
public string issue_date;
public string expiry_date;
public int amount_initial;
public int amount_remaining;
public JsonMemberDetails member;
public int? _store_details;
public int? _staff_details;
public int? _product_details;
}
public class JsonMemberDetails
{
public string Id;
public string first_name;
public string last_name;
public string email;
public string _email_trigger;
public string _email_bounced;
public string _email_promo;
public string _app_notify;
public string _sms_status;
public string active;
}
有了这些修复程序,使用Json.NET,您可以执行以下操作:
var response = JsonConvert.DeserializeObject<JsonRewardResponse>(json);
(您可能会遇到其他序列化程序的其他问题。)
当我想反序列化JSON时,我要么使用c#中的动态类型,要么如果我想做你正在做的事情,我会将JSON输入到网站:
http://json2csharp.com/
我从来没有对此有过意见。