#c_sharp #json
В ответ на запрос к 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) Есть ли возможность "частичной" десериализации объекта?
Ответы
Ответ 1
Да, использование класса, определённого только для десериализации может иметь смысл, т. к. при этом вы проверяете не только несколько полей, а всю структуру, и ловите возможные ошибки. Но это довольно трудоёмкая штука, так что выбирайте сами. Да, есть. Один из методов в ответе @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)Ответ 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;
Комментариев нет:
Отправить комментарий