Json.net 无法将 JSON 字符串反序列化为 ObservableCollection



>我正在尝试将 JSON 字符串反序列化为 ObservableCollection 对象,但 Json.net 抛出此错误

{"无法将当前 JSON 对象(例如 {\"name\":\"value\"})反序列化为类型'System.Collections.ObjectModel.ObservableCollection'1[ZenPanda.DataModel.Session]',因为该类型需要一个 JSON 数组(例如 [1,2,3])才能正确反序列化。\r要修复此错误,请将 JSON 更改为 JSON 数组(例如 [1,2,3])或更改反序列化类型,使其成为普通的 .NET 类型(例如,不是像整数这样的基元类型, 不是可以从 JSON 对象反序列化的集合类型,如数组或列表)。还可以将 JsonObjectAttribute 添加到类型中,以强制它从 JSON 对象反序列化。\r路径"参数",第 1 行,位置 13。


我的数据模型如下

public class Session
{
    [JsonProperty("arguments")]
    public SessionProperties arguments { get; set; }
    [JsonProperty("result")]
    public string Result { get; set; }
    [JsonProperty("tag")]
    public int Tag { get; set; }
}
public class SessionProperties
{
   [JsonProperty("alt-speed-down")]
   public int Altspeeddown { get; set; }
   [JsonProperty("alt-speed-enabled")]
   public bool Altspeedenabled { get; set; }
   [JsonProperty("alt-speed-time-begin")]
   public int Altspeedtimebegin { get; set; }
   [JsonProperty("alt-speed-time-day")]
   public int Altspeedtimeday { get; set; }
   [JsonProperty("alt-speed-time-enabled")]
   public bool Altspeedtimeenabled { get; set; }
   [JsonProperty("units")]
   public SessionUnits Units { get; set; }
   [JsonProperty("utp-enabled")]
   public bool Utpenabled { get; set; }
}
public class SessionUnits
{
    [JsonProperty("memory-bytes")]
    public int Memorybytes { get; set; }
    [JsonProperty("memory-units")]
    public List<string> Memoryunits { get; set; }
}

这是调用 JsonConvert 的代码

 public ObservableCollection<Session> currentSession = new ObservableCollection<Session>();
 string sessionResponse = await task.Content.ReadAsStringAsync();
 currentSession = JsonConvert.DeserializeObject<ObservableCollection<Session>>(sessionResponse);

这是原始的 JSON

{"arguments": {"alt-speed-down":50,"alt-speed-enabled":false,"alt-speed-time-begin":540,"alt-speed-time-day":127,"alt-speed-time-enabled":false,
    "units":{"memory-bytes":1024,"memory-units":["KiB","MiB","GiB","TiB"],"size-bytes":1000,"size-units":["kB","MB","GB","TB"],"speed-          bytes":1000,"speed-units":["kB/s","MB/s","GB/s","TB/s"]},
    "utp-enabled":true}, 
"result":"success", 
"tag":568}  

如果我将currentSession声明为普通Session对象,那么 Json.net 愉快地反序列化到该实例中,但是当我将其声明为ObservableCollection时 Json.net 抛出错误。

我对编程很陌生,所以如果这是一个完整的新手问题/问题,请道歉。提前感谢!

JSON 仅表示单个元素,因此必须将其反序列化为单个对象。 为了直接反序列化为集合,JSON 需要表示一个数组。 由于它没有,因此当您尝试执行此操作时会出现错误。

最好的办法是像最初一样将 JSON 反序列化为 Session 对象,然后只需自己创建一个ObservableCollection并将Session添加到其中即可。

Session session = JsonConvert.DeserializeObject<Session>(sessionResponse);
ObservableCollection collection = new ObservableCollection<Session>();
collection.Add(session);

相关内容

  • 没有找到相关文章

最新更新