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

时间:2013-07-20 11:58:49

标签: c# asp.net json

我有这样的课程;

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; }
}

我像这样deserilaze;

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

我的输出似乎喜欢这个(字符串sc)fiddler

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

但我得到错误无法将当前JSON数组(例如[1,2,3])反序列化为类型 这些代码有什么不对。

谢谢。

4 个答案:

答案 0 :(得分:62)

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

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

您还可以将数组反序列化为MyStok个对象列表,并将对象置于索引0处。

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

答案 1 :(得分:18)

对于阵列类型请尝试这个。

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

See here for details to deserialise Json

答案 2 :(得分: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);

答案 3 :(得分:0)

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

List<OfthisModelType>

反序列化失败。

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