无法使用字典列表解析JSON数据

时间:2015-11-11 00:57:46

标签: c# asp.net json

我想将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}

}}"

如何使用此数据列表的Dictionary创建一个类,并将其反序列化为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

2 个答案:

答案 0 :(得分:0)

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

这里有一些问题:

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

  2. product_details应重命名为_product_details

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

  4. member应重命名为_member_details

  5. 因此:

    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);
    

    (其他序列化程序可能还有其他问题。)

答案 1 :(得分:0)

当我想反序列化JSON时,我要么在c#中使用动态类型,要么我想要你正在做什么,我将json提供给网站:

http://json2csharp.com/

我从来没有遇到过这个问题。