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

HttpClient and JSON with arrays

如果你不想重写你的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>>();