无法使用字典列表分析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数据

您没有说明您正在使用什么序列化程序,因此我给出的建议与所有JSON序列化程序相关。

这里有几个问题:

  1. 属性mydictionary的名称应该是data,因为这就是JSON中的名称。

  2. 应将product_details重命名为_product_details

  3. _store_details_staff_details_product_details被声明为int,但是它们在JSON中显示为null。因此,它们需要是c#中的某种可为null的类型,例如int?string。(这些在JSON中为null的事实表明,但并不能证明,当它们不是null时,它们不是整数类型。)

  4. 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/

我从来没有对此有过意见。