Я хочу разбирать 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));
}
}
}
Если вы не хотите переписывать свой класс 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>>();