2015-11-11 2 views
-1

Я хочу, чтобы разобрать JSON данных в C#Невозможно разобрать JSON данные со списком словаря

Данные:

"{\"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\":\"[email protected]\",\"_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\":\"[email protected]\",\"_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; 
} 

Помогите спасибо в Advance.

Bharath AK

+0

Какой сериализатор вы используете? Json.NET? – dbc

ответ

0

Вы не говорите, что сериализатору вы используете, так что совет, который я даю актуальна для всех JSON сериализаторов.

У вас есть несколько проблем здесь:

  1. Имя свойства mydictionary должно быть data, так это то, что находится в формате JSON.

  2. product_details следует переименовать в _product_details.

  3. _store_details, _staff_details и _product_details объявлены int, однако они появляются как null в формате JSON. Таким образом, они должны быть своего рода тип с нулевым значением в C#, например int? или string. (Тот факт, что они являются недействительными в формате JSON предлагает, но не доказывает, что они не являются целые типы, когда не равен нулю.)

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

(Вы могли бы иметь дополнительные проблемы с другими сериализаторов.)

+0

Спасибо dbc, теперь он работает нормально и разрешен. Спасибо за вашу помощь. Проблема заключалась в том, что я был в предположении, словарь - это единственный элемент, который не является итеративным, как одна пара значений ключа, вот где я ошибался. Я использую Newtonsoft JSON, теперь я включил JsonProperty для дочерних словарей, теперь он работает нормально. –

0

Когда Я хочу десериализовать JSON, я либо использую динамический тип в C#, либо если я хочу делать то, что вы делаете I f ПЕД в JSON в веб-сайт:

http://json2csharp.com/

Я никогда не имел проблемы с этим.

+0

Привет, Питер, Спасибо за ваш ответ, я был в предположении, словарь - это единственный элемент, который не является итеративным, точно так же, как одна пара значений ключа, вот где я ошибался. Я использую Newtonsoft JSON, я включил JsonProperty для дочерних словарей, теперь он работает нормально.Спасибо за ваш ответ. –