HttpClient и JSON с массивами

1

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

Мой JSON:

{  
   "odata.metadata":"http://212.182.24.861:12345/DataService.svc",
   "value":[  
      {  
         "Event_p":[  

         ],
         "Id":1,
         "Status":0,
         "Name":"test"
      },
      {  
         "Event_p":[  

         ],
         "Id":2,
         "Status":0,
         "Name":"test"
      }
   ]
}

Мое задание:

public async Task<IEnumerable<Event>> LoadEvents()
{
    HttpClient httpClient = new HttpClient();
    var response = await httpClient.GetAsync("address");

    var jsonString = await response.Content.ReadAsStringAsync();
    var values = JsonConvert.DeserializeObject<ObservableCollection<Event>>(jsonString);

    return values;
}

Моя модель, на данный момент я хочу только получить имя.

public class Event : INotifyPropertyChanged
{
    private string _name;

    public string Name
    {
        get { return _name; }
        set
        {
            if (_name == value)
            {
                return;
            }

            _name = value;
            RaisePropertyChanged("Name");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void RaisePropertyChanged(string propertyName)
    {
        var handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}
  • 0
    Ваше определение класса Event не соответствует структуре файла JSON, который вы пытаетесь проанализировать. Возможно, если ваш JSON будет выглядеть следующим образом, он будет успешно проанализирован. [{"Event_p": [], "Id": 1, "Status": 0, "Name": "test"}, {"Event_p": [], "Id": 2, "Status": 0, "Имя": "тест"}]
  • 0
    Я не могу редактировать JSON, что я могу сделать с моим классом Event?
Показать ещё 1 комментарий
Теги:
xaml
windows-phone-8

1 ответ

0
Лучший ответ

Если вы не хотите переписывать свой класс Event, вы также можете вручную разобрать ответ JSON, используя LINQ to JSON, предоставленный JSON.NET:

var parsed = JObject.Parse(jsonString);
var events = parsed["value"].Select(
    e => new Event { Name = e["Name"].ToString() });

var values = new ObservableCollection<Event>(events);

Или, может быть, немного чище:

var values = JObject.Parse(jsonString)["value"].ToObject<ObservableCollection<Event>>();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню