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

Posted

技术标签:

【中文标题】无法将当前 JSON 数组(例如 [1,2,3])反序列化为类型【英文标题】:Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 【发布时间】:2013-07-19 16:19:31 【问题描述】:

我有这样的课:

public class MyStok

    public int STId  get; set; 
    public int SM  get; set; 
    public string CA  get; set; 
    public string Br  get; set; 
    public string BNo  get; set; 
    public decimal Vat  get; set; 
    public decimal Price  get; set; 

我这样反序列化:

string sc = e.ExtraParams["sc"].ToString();
MyStok myobj = JSON.Deserialize<MyStok>(sc);

我在提琴手上的输出似乎是这样的(string sc):

[
    
        "STId": 2,
        "CA": "hbh",
        "Br": "jhnj",
        "SM": 20,
        "Vat": 10,
        "Price": 566,
        "BNo": "1545545"
    
]

但我得到了错误:

[...]

那段代码有什么问题?

【问题讨论】:

【参考方案1】:

看起来该字符串包含一个数组,其中包含一个 MyStok 对象。如果您从输入的两端删除方括号,您应该能够将数据反序列化为单个对象:

MyStok myobj = JSON.Deserialize<MyStok>(sc.Substring(1, sc.Length-2));

您还可以将数组反序列化为MyStok 对象列表,并获取索引为零的对象。

var myobjList = JSON.Deserialize<List<MyStok>>(sc);
var myObj = myobjList[0];

【讨论】:

【参考方案2】:

对于数组类型请试试这个。

 List<MyStok> myDeserializedObjList = (List<MyStok>)Newtonsoft.Json.JsonConvert.DeserializeObject(sc, typeof(List<MyStok>));

请See here for details to deserialise Json

【讨论】:

非常感谢你的例子,你拯救了我的一天......我错过了使用 List Of 的意义。【参考方案3】:

我遇到了完全相同的错误消息。我尝试了 Aditi 的例子,然后我意识到真正的问题是什么。 (因为我有另一个 apiEndpoint 进行了类似的调用,效果很好。)在这种情况下,我列表中的对象还没有从中提取接口。所以因为我显然错过了一步,当它去绑定到

List<OfthisModelType>

反序列化失败。

如果您发现此问题,请检查是否是问题所在。

【讨论】:

【参考方案4】:

如果您有一个没有名称的根级数组并且您确实想将其用于某些事情,例如添加方法,则另一种选择

public class MyStoks : List<MyStok> 



然后就可以这样反序列化了

MyStoks myObj = JsonConvert.DeserializeObject<MyStoks>(jsonString);

【讨论】:

【参考方案5】:
HttpClient webClient = new HttpClient();
Uri uri = new Uri("your url");
HttpResponseMessage response = await webClient.GetAsync(uri)
var jsonString = await response.Content.ReadAsStringAsync();
var objData = JsonConvert.DeserializeObject<List<CategoryModel>>(jsonString);

【讨论】:

这并没有真正为问题或其他答案增加任何价值。 仅当您将 HttpClient 调用标记为答案有用时才适用因为最后一行的答案是将其反序列化为类 JsonConvert.DeserializeObject> 的列表(jsonString); 感谢您提供此代码 sn-p,它可能会提供一些有限的即时帮助。 proper explanation 将通过展示为什么这是解决问题的好方法,并使其对有其他类似问题的未来读者更有用,从而大大提高其长期价值。请edit您的回答添加一些解释,包括您所做的假设。

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

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

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

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

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

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

无法将 JSON 数组(例如 [1,2,3])反序列化为类型 ' ',因为类型需要 JSON 对象(例如 "name":"value")才能正确反序列化