Страницы

Поиск по вопросам

понедельник, 24 декабря 2018 г.

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

В ответ на запрос к 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) Есть ли возможность "частичной" десериализации объекта?


Ответ

Да, использование класса, определённого только для десериализации может иметь смысл, т. к. при этом вы проверяете не только несколько полей, а всю структуру, и ловите возможные ошибки. Но это довольно трудоёмкая штука, так что выбирайте сами. Да, есть. Один из методов в ответе @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)

Комментариев нет:

Отправить комментарий