Десериализация пользовательского массива с помощью RestSharp / JSON.NET - PullRequest
4 голосов
/ 20 января 2012

Я использую RestSharp / JSON.NET для общения с API, который возвращает коллекцию следующим образом:

{
    "count": 100,
    "0":
    {
        "title":"some title"
    },
    "1":
    {
        "title":"some title"
    },
    ....
}

Вместо обычного формата:

{
    "count": 100,
    "items":
    [
        {
            "title":"some title"
        },
        {
            "title":"some title"
        },
        ....
    ]
}

IsЕсть ли простой способ заставить RestSharp / JSON.NET правильно проанализировать первый пример, т.е. в свойство массива Item [] моего десериализованного объекта?

Нужно ли мне писать собственный десериализатор?

Ответы [ 2 ]

0 голосов
/ 25 июля 2012

Эта коллекция не подчиняется обычному формату json, поэтому требуется какое-то переопределение json net. Возможно, вы сможете написать специальный конвертер json net Custom Conveter , затем вы сможете получить его в RestSharp.

Или вы можете взять весь объект как объект JObject, который, по крайней мере, даст вам объект, который вы можете просмотреть и преобразовать в список.

Хотя это, по сути, то же самое, что и пользовательский десериализатор, сначала вы просто помещаете его в очень общий объект и переходите оттуда, лучше, чем работа со строкой:)

0 голосов
/ 28 февраля 2012

У вас есть контроль над API?Вы можете изменить это?То, как вы получаете предметы, кажется мне очень странным.Вы получаете не коллекцию объектов, а отдельные объекты одного типа.Я имею в виду, что ваш BO будет выглядеть так, чтобы отобразить то, что вы получаете:

    class YourBO
    {
        int count;
        YourProperty prop0;
        YourProperty prop1;
        ...
    }

Вместо получения набора свойств, как это было бы с вашим вторым примером:если у вас нет конечного и известного количества элементов, дизайн json, который вы получаете, не имеет смысла

...