Почему мой JObject для преобразования модели возвращает ноль? - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь преобразовать очень простой JObject в объект модели C #, но по какой-то причине все, что я получаю, является нулевым.

Модель объекта выглядит следующим образом

public class PerfectFit
{
    public Array Categories { get; set; }
}

Конвертер также прост, как этот

public static PerfectFit PerfectFitTopLevelFormat(IQueryable<JObject> unformattedQueryOutput)
{

    //var jongel = unformattedQueryOutput.ToList();


    PerfectFit formattedQueryOuput = Newtonsoft.Json.JsonConvert.DeserializeObject<PerfectFit>(unformattedQueryOutput.ToList().ToString());


    return formattedQueryOuput;
}

И я вызываю метод конвертера вот так

PerfectFit formattedQueryOutput = ReFormatQueryOutput.PerfectFitTopLevelFormat(queryResultSet);
return Ok(formattedQueryOutput);

queryResultSet извлекается следующим образом

IQueryable<JObject> queryResultSet = client.CreateDocumentQuery<JObject>(UriFactory.CreateDocumentCollectionUri(brandDbInfo.DbName, brandDbInfo.DbCollection), queryElementInfo.SqlStatement, queryOptions);

Если я просто верну queryResultSet.ToList (); Я получаю следующее

[
    {
        "topLevelCat": "Barn"
    },
    {
        "topLevelCat": "Dam"
    },
    {
        "topLevelCat": "Herr"
    },
    {
        "topLevelCat": "Divided"
    }
]

Итак, я знаю, что данные возвращаются нормально из моего источника данных, но мне не удается заставить преобразование в мою простую модель работать.

Что мне здесь не хватает?

1 Ответ

0 голосов
/ 14 января 2019

Ваш JSON представляет массив объектов, где каждый объект содержит строковое свойство с именем toplevelCat. Вы пытаетесь десериализовать в один объект, содержащий массив с именем Categories. Поскольку ваша модель не соответствует JSON, она не будет работать. Сделайте вашу модель такой:

public class PerfectFit
{
    public string TopLevelCat { get; set; } 
}

Вы можете десериализоваться в List<PerfectFit> из вашей строки JSON следующим образом:

List<PerfectFit> list = JsonConvert.DeserializeObject<List<PerfectFit>>(json);

Скрипка: https://dotnetfiddle.net/syULkn

Если вы начинаете с IQueryable<JObject>, вы сможете сделать что-то вроде этого:

List<PerfectFit> list = queryResultSet.ToList()
    .Select(jo => jo.ToObject<PerfectFit>()).ToList();

Скрипка: https://dotnetfiddle.net/5JS1gX

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...