HttpClient and JSON with arrays
本文关键字:arrays with JSON and HttpClient | 更新日期: 2023-09-27 18:18:47
我想解析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;
}
我的模型,现在我只想得到name。
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来手动解析JSON响应。净:
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>>();