WinForms 错误无法将当前 JSON 数组(例如 [1,2,3])反序列化为类型

Posted

技术标签:

【中文标题】WinForms 错误无法将当前 JSON 数组(例如 [1,2,3])反序列化为类型【英文标题】:WinForms Error Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 【发布时间】:2022-01-02 06:36:55 【问题描述】:

我有这样的代码:

Dictionary<string, Diskop> data = JsonConvert.DeserializeObject<Dictionary<string, Diskop>>(res.Body.ToString());

这是 Diskop 类:

internal class Diskop : Dictionary<string, Diskop>

    public string isim  get; set; 
    public int no  get; set; 
    public int puan  get; set; 

我得到了那个错误:

Newtonsoft.Json.JsonSerializationException: '无法将当前 JSON 数组(例如 [1,2,3])反序列化为类型 'System.Collections.Generic.Dictionary`2[System.String,Turuncu_Uygulama.Diskop]' 因为type 需要一个 JSON 对象(例如 "name":"value")才能正确反序列化。

这是json

[ 

"isim" : "AHMET UTKU GÖKSAL", “不”:929, “普安”:96 , “isim”:“艾哈迈德·亚西尔·耶尔迪兹”, “不”:969, “普安”:95 , "isim" : "AKİF ENES ÖZDEMİR", “不”:953, “普安”:108 , “isim”:“ALİAKTÜRK”, “不”:910, “普安”:111

【问题讨论】:

你必须发布 json,如果你需要一些帮助,我猜你使用的代码来获取它 我发布了 json 我如何发布文件 @Menque 将内容发布为文本 【参考方案1】:

Diskop 应如下所示:

internal class Diskop

    [JsonProperty("isim")]
    public string Isim  get; set; 

    [JsonProperty("no")]
    public int No  get; set; 

    [JsonProperty("puan")]
    public int Puan  get; set; 

Deser 应该看起来像:

var data = JsonConvert.DeserializeObject<Diskop[]>(res.Body.ToString());

或者喜欢:

var data = JsonConvert.DeserializeObject<List<Diskop>>(res.Body.ToString());

因为你的 json 代表一个 Diskops 数组:

[ 
 "isim" : "AHMET UTKU GÖKSAL", "no" : 929, "puan" : 96 , 
 "isim" : "AHMET YASİR YILDIZ", "no" : 969, "puan" : 95 , 
 "isim" : "AKİF ENES ÖZDEMİR", "no" : 953, "puan" : 108 ,
 "isim" : "ALİ AKTÜRK", "no" : 910, "puan" : 111 
]

如果Dictionary&lt;string, Diskop&gt; 看起来像磁盘映射,您将使用它:

 
"a":  "isim" : "AHMET UTKU GÖKSAL", "no" : 929, "puan" : 96 , 
"b":  "isim" : "AHMET YASİR YILDIZ", "no" : 969, "puan" : 95 , 
"c":  "isim" : "AKİF ENES ÖZDEMİR", "no" : 953, "puan" : 108 ,
"d":  "isim" : "ALİ AKTÜRK", "no" : 910, "puan" : 111 

【讨论】:

感谢您的关注 但 DeserializeObject 仅反序列化 name:value 数组。所以“a”只能有一个值。我如何反序列化多值数组@Caius Jard 不确定我是否理解问题

以上是关于WinForms 错误无法将当前 JSON 数组(例如 [1,2,3])反序列化为类型的主要内容,如果未能解决你的问题,请参考以下文章

无法将当前 JSON 数组(例如 [1,2,3])反序列化为类型

无法将当前 JSON 数组(例如 [1,2,3])反序列化为类型“ConsoleAppTest01.Location”,因为该类型需要 JSON 对象

无法将当前 JSON 数组(例如 [1,2,3])反序列化为具有复杂和嵌套对象的类型

无法将当前 JSON 数组(例如 [1,2,3])反序列化为“System.Collections.Generic.Dictionary”类型

无法将当前JSON数组(例如[1,2,3])反序列化为“模型”类型

无法将当前 JSON 对象(例如 "name":"value")反序列化为类型“Value[]”,因为该类型需要 JSON 数组(例如 [1,2,3])