1

JSON 文字列を ObservableCollection オブジェクトに逆シリアル化しようとしていますが、Json.net がこのエラーをスローしています

{"現在の JSON オブジェクト (例: {\"name\":\"value\"}) をタイプ 'System.Collections.ObjectModel.ObservableCollection`1[ZenPanda.DataModel.Session]' にデシリアライズできません。このタイプには JSON が必要なためです\r\nこのエラーを修正するには、JSON を JSON 配列 ([1,2,3] など) に変更するか、逆シリアル化された型をJSON オブジェクトから逆シリアル化できる通常の .NET 型 (たとえば、整数のようなプリミティブ型ではなく、配列やリストのようなコレクション型ではない) JsonObjectAttribute を型に追加して、JSON オブジェクトから強制的に逆シリアル化することもできます。 \r\nパス「引数」、行 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 はエラーをスローします。

私はプログラミングにまったく慣れていないので、これが完全な初心者のコックアップの質問/問題である場合はお詫びします。前もって感謝します!

4

1 に答える 1