JavaScriptSerializer.Deserialize массив - PullRequest
       4

JavaScriptSerializer.Deserialize массив

19 голосов
/ 27 января 2012

У меня проблемы с десериализацией массива в .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.

Есть идеи?

Ответы [ 2 ]

47 голосов
/ 27 января 2012

Вы должны десериализовать вашу строку json, чтобы набрать List<BigCommerceOrderProduct>.Нет необходимости в BigCommerceOrderProducts классе

var myobj = jsSerializer.Deserialize<List<BigCommerceOrderProduct>>(jsonData);
1 голос
/ 27 января 2012

Эта маленькая прогги отлично работает для меня.В потоке ответов может быть что-то неожиданное.

Вывод json: {"Data": [{"Id": 33, "Order_id": 230025}, {"Id": 34, "Order_id": 230025}]}

    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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...