JavaScriptSerializer.反序列化数组

本文关键字:数组 反序列化 JavaScriptSerializer | 更新日期: 2023-09-27 18:21:40

我在.NET MVC3中反序列化数组时遇到问题,如有帮助,不胜感激。

以下是代码片段:

using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
using (StreamReader reader = new StreamReader(response.GetResponseStream())) {
    JavaScriptSerializer jsSerializer = new JavaScriptSerializer();
    string jsonData = reader.ReadToEnd();
    result = (BigCommerceOrderProducts)jsSerializer.Deserialize<BigCommerceOrderProducts>(jsonData);
}

以下是JSON作为jsonData返回的数据字符串的子集。我已经删除了多余的字段。

"[
{'"id'":33,'"order_id'":230025,...},
{'"id'":34,'"order_id'":230025,...}
]"

以下是对象:

[Serializable]
public class BigCommerceOrderProducts {
    public List<BigCommerceOrderProduct> Data { get; set; }
}
[Serializable]
public class BigCommerceOrderProduct {
    public int Id { get; set; }
    public int Order_id { get; set; }
    ...
}

我得到这个错误:

"Type 'Pxo.Models.BigCommerce.BigCommerceOrderProducts' is not supported for deserialization of an array.

有什么想法吗?

JavaScriptSerializer.反序列化数组

您应该将json字符串反序列化为类型List<BigCommerceOrderProduct>。无需BigCommerceOrderProducts

var myobj = jsSerializer.Deserialize<List<BigCommerceOrderProduct>>(jsonData);

这个小程序对我来说很好。可能是响应流中的意外情况。

json输出为:{"Data":〔{"Id":33,"Order_Id":230025},{"Id":34,"Orderid":23005}〕}

    JavaScriptSerializer jsSerializer = new JavaScriptSerializer(); 
    BigCommerceOrderProducts a = new BigCommerceOrderProducts();
    a.Data = new List<BigCommerceOrderProduct>();
    BigCommerceOrderProduct b = new BigCommerceOrderProduct();
    b.Id = 33;
    b.Order_id = 230025;
    a.Data.Add(b);
    b = new BigCommerceOrderProduct();
    b.Id = 34;
    b.Order_id = 230025;
    a.Data.Add(b);
    string x = jsSerializer.Serialize(a);
    Console.WriteLine(x);
    a = jsSerializer.Deserialize<BigCommerceOrderProducts>(x);
    Console.WriteLine(a.Data[0].Order_id);
    Console.ReadLine();