51

我有这样的课:

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"
    }
]

但我得到了错误:

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

该代码有什么问题?

4

5 回答 5

98

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

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

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

var myobjList = JSON.Deserialize<List<MyStok>>(sc);
var myObj = myobjList[0];
于 2013-07-20T12:01:59.083 回答
24

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

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

参阅此处了解反序列化 Json 的详细信息

于 2013-07-20T12:07:58.023 回答
0

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

public class MyStoks : List<MyStok> 
{

}

然后你可以像这样反序列化

MyStoks myObj = JsonConvert.DeserializeObject<MyStoks>(jsonString);
于 2021-08-23T11:04:33.147 回答
0

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

List<OfthisModelType>

它未能反序列化。

如果您看到此问题,请检查是否可能是问题所在。

于 2021-02-24T17:57:36.277 回答
-1
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);
于 2017-04-25T09:43:54.220 回答