无法将当前JSON数组(例如[1,2,3])反序列化为类型
本文关键字:类型 反序列化 JSON 例如 数组 | 更新日期: 2023-09-27 18:23:58
我有一个这样的类:
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);
我在fiddler上的输出似乎是这样的(string sc
):
[
{
"STId": 2,
"CA": "hbh",
"Br": "jhnj",
"SM": 20,
"Vat": 10,
"Price": 566,
"BNo": "1545545"
}
]
但我得到了错误:
无法将当前JSON数组(例如[1,2,3])反序列化为类型[…]
那个代码出了什么问题?
看起来字符串包含一个数组,其中包含一个MyStok
对象。如果从输入的两端移除方括号,则应该能够将数据反序列化为一个对象:
MyStok myobj = JSON.Deserialize<MyStok>(sc.Substring(1, sc.Length-2));
您还可以将数组反序列化为MyStok
对象的列表,并获取索引为零的对象。
var myobjList = JSON.Deserialize<List<MyStok>>(sc);
var myObj = myobjList[0];
对于数组类型,请尝试此类型。
List<MyStok> myDeserializedObjList = (List<MyStok>)Newtonsoft.Json.JsonConvert.DeserializeObject(sc, typeof(List<MyStok>));
请参阅此处了解取消序列化Json 的详细信息
我遇到了完全相同的错误消息。我尝试了阿迪蒂的例子,然后我意识到真正的问题是什么。(因为我有另一个apiEndpoint进行了类似的调用,效果很好。)在这种情况下,我列表中的对象还没有从中提取接口。所以,因为我显然错过了一步,当它去绑定时
List<OfthisModelType>
它未能反序列化。
如果您看到这个问题,请检查是否可能是这个问题。
如果您有一个没有名称的根级数组,并且您实际上想将其用于某些事情,例如添加方法,则另一种选择
public class MyStoks : List<MyStok>
{
}
然后你可以像这样反序列化
MyStoks myObj = JsonConvert.DeserializeObject<MyStoks>(jsonString);
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);