“Частичная” десериализация объекта

248
28 апреля 2017, 16:27

В ответ на запрос к API я получаю json следующей структуры:

[ 
  { "address": "someaddress",
    "code": "ABC12345",
    "type": "sometype",
    "category": "somecategory"
    // + еще около 40 свойств
   }, 
   ...// такие же объекты
]

Из всего этого мне нужны только два поля "code" и "type", точнее массив объектов SomeType:

SomeType
{
   public string code { get; set; }
   public string type { get; set; }
}

Класса, по типу которого сериализуется такой объект у меня нет.

В связи с этим два вопроса:

1) Есть ли смысл создавать такой класс, описывать 40+ полей, если нигде кроме десериализации он использоваться не будет?

2) Есть ли возможность "частичной" десериализации объекта?

Answer 1
  1. Да, использование класса, определённого только для десериализации может иметь смысл, т. к. при этом вы проверяете не только несколько полей, а всю структуру, и ловите возможные ошибки. Но это довольно трудоёмкая штука, так что выбирайте сами.
  2. Да, есть. Один из методов в ответе @gil9red, другой смотрите ниже.

Альтернативой к dynamic может быть использование JObject (тоже из JSON.NET):

var arr = JArray.Parse(json);
var result =
    arr.Select(item =>
            new SomeType() { code = (string)item["code"], type = (string)item["type"] })
       .ToList();

Результат:

foreach (var st in result)
    Console.WriteLine($"(code = {st.code}, type = {st.type})");

выдаёт

(code = ABC12345, type = sometype)
(code = XYZ98765, type = someothertype)
Answer 2

Из примера разбора JSON:

dynamic stuff = JsonConvert.DeserializeObject("{ 'Name': 'Jon Smith', 'Address': { 'City': 'New York', 'State': 'NY' }, 'Age': 42 }");
string name = stuff.Name;
string address = stuff.Address.City;
READ ALSO
Перебрать все TextBox расположенные во всех Panel

Перебрать все TextBox расположенные во всех Panel

Есть две Panel, в каждой из них по пять TextBox

326
Найти картинку среди текста

Найти картинку среди текста

Например, есть изображение, на этом изображении текст, а так же может быть иллюстрация

280
Как организовать работу сайта с ботом telegram?

Как организовать работу сайта с ботом telegram?

Можно ли организовать работу сайта с ботом telegram в таком ключе, я отправляю боту команду, а он POST или GET запросом отправляет ее на сайт и на сайте...

307
ошибка в mysqli запросе

ошибка в mysqli запросе

имеется код запроса:

224