C# создать список объектов из дессериализации дерева объектов JSON

332
26 июня 2017, 17:27

Сразу хочу сказать, что я начинающий разработчик и прошу прощения, если вопрос поставлен не корректно. Нигде не нашел, как обратится к вложенному объекту JSON.

Мне необходимо вытянуть из очень большого JSON файла определенные строки, объединить в объект и собрать в списко объектов. Не выходит написать класс с необходимыми параметрами. Вот небольшая часть JSON:

  "result": [
{
  "id": 13,
  "identity": "",
  "way": "reduction",
  "proc": "open",
  "state": "started",
  "title": "Молот Тора",
  "description": "",
bla-bla-bla
]
  "entityType": "bidding",
  "owner": {
    "personId": 38,
    ...
    "subjectRole": "OWNER",
    "personContractorId": 38,
    "contractorId": 38,
    "contractorName": "Фьюри Ник Фф",
    "contractorAvatarId": 49,
    "contractorAvatarUrl": "...",
    "coverFileId": 50,
    "coverFileUrl": "...",
    "contractorType": "PERSON",
    "contractorTypeCompany": ""
  }
},{
  "id": 15,...

Вот в этом месте у меня и возникла проблема. Не уверен, видно ли это из скопированной части JSON, но "result" это корневой объект внутрь которого вложен объект "owner", внутри которого часть нужных мне полей. Для работы с JSON написал вот такой класс:

    using Newtonsoft.Json;
    using System;
    namespace BackgroundTasks
    {
        [Serializable]
        public sealed class Bid
        {
        [JsonProperty(PropertyName = "entityType")]
        public string EntityType { get; set; }
        [JsonProperty(PropertyName = "title")]
        public string Title { get; set; }
        [JsonProperty(PropertyName = "proc")]
        public string Process { get; set; }
        [JsonProperty(PropertyName = "Id")]
        public int Id { get; set; }
        [JsonProperty(PropertyName = "owner")]
        public object Owner { get; set; }
        public Bid() { }
        public Bid(string entityType, string title, string process, int id, object owner)
        {
            EntityType = entityType;
            Title = title;
            Process = process;
            Id = id;
            Owner = owner;
        }
    }
    [Serializable]
    public sealed class BidOwner
    {
        [JsonProperty(PropertyName = "contractorName")]
        public string ContractorName { get; set; }
        [JsonProperty(PropertyName = "contractorAvatarUrl")]
        public string LogoUrl { get; set; }
        public BidOwner() { }
        public BidOwner(string contractorName, string logoUrl)
        {
            ContractorName = contractorName;
            LogoUrl = logoUrl;
        }
    }
}

Поля из "owner" не тянулись(видно на скрине), когда был только class Bid, в котором были перечислены все поля.

GET запросом я получаю string jsonText и далее:

var json = JObject.Parse(jsonText);
List<JToken> result = json["result"].Children().ToList();
        IList<Bid> bidSearchResults = new List<Bid>();
        foreach (JToken res in result)
        {
            Bid searchResult = res.ToObject<Bid>();
            bidSearchResults.Add(searchResult);
        }

Должно быть так, но с заполненными полями: enter image description here

А получается вот так: enter image description here

READ ALSO
Отслеживание изменений в SQLite WPF

Отслеживание изменений в SQLite WPF

Допустим имеется две базы данных в SQLiteКаким образом изменения в одной, со временем, можно применить в другой?

285
Ограничить время жизни потока

Ограничить время жизни потока

Есть список задач, каждую задачу нужно ограничить по времениЕсли задача не успевает выполниться, то пусть возвращается какое-то дефолтное...

299
Обработка данных в дочернем окне MVVM

Обработка данных в дочернем окне MVVM

Нужно реализовать добавление продуктов в категории через диалоговое окно

274
Как достать значение из async Task

Как достать значение из async Task

Есть вот такой кодВопрос: как в Main достать значение heart из ExampleTask()?

325