无法将JArray复制到ObservableCollection

问题描述:

所以我觉得我真的很接近,只是缺少一点胶水来让魔法工作。无法将JArray复制到ObservableCollection

考虑一个代码类:

public class Transaction 
{ 
    [JsonProperty(PropertyName = "date")] 
    public DateTime Date { get; set; } 

    [JsonProperty(PropertyName = "payee")] 
    public string Payee { get; set; } 

    [JsonProperty(PropertyName = "amount")] 
    public double Amount { get; set; } 

    [JsonProperty(PropertyName = "category")] 
    public string Category { get; set; } 
} 

private ObservableCollection<Transaction> items; 
private JArray result; 

和App.MobileService.InvokeApiAsync

[ 
    { 
     "date": "2014-09-26T00:00:00Z", 
     "payee": "Expensive Restaurant", 
     "amount": -199, 
     "category": "Dining", 
    } 
] 

我已验证返回的JArray对象被正确解析并填充该JSON响应。我想将数据导入ObservableCollection。

我已经试过的各种咒语,用最简单的幸福:

items = result; 

哪些错误与

Cannot implicitly convert type 'Newtonsoft.Json.Linq.JArray' to 'System.Collections.ObjectModel.ObservableCollection<Transaction>' 

或:

items = new ObservableCollection<Transaction> (result); 

哪些错误与:

Argument 1: cannot convert from 'Newtonsoft.Json.Linq.JArray' to 'System.Collections.Generic.IEnumerable<Transaction>' 

我已经阅读了大量的样本,看起来这应该是超级简单的,所以我确信我错过了一些简单的东西。任何帮助赞赏。

UPDATE:

此我想要做什么和作品,但似乎我击败的目的一些内置JSON.NET类的反序列化功能:

  foreach (JObject jObject in result) 
      { 
       Transaction trans = new Transaction(); 
       trans.Date = (DateTime)jObject["date"]; 
       trans.Payee = (string)jObject["payee"]; 
       trans.Amount = (double)jObject["amount"]; 
       trans.Category = (string)jObject["category"]; 
       items.Add(trans); 
      } 

如果你已经有一个resultJArray您想将其转换为ObservableCollection<Transaction>,你可以做这样的:

items = result.ToObject<ObservableCollection<Transaction>>(); 

演示https://dotnetfiddle.net/saQmas

+0

是的!这感觉就像我从未尝试过的变化。 :) – OldDogNewTrick 2014-09-01 03:47:11