Newtonsoft. Json - Сценарии

Page / - Изменено Alexandr Fokin в 2023/11/11 13:29

Сценарии

Изменено Alexandr Fokin

в 2023/11/11 13:29

Оглавление

JsonConverter. Реализация собственной логики сериализации (десериализации) для типа.	Возможна реализация собственной логики сериализации (десериализации) для типа T и использование ее на уровне классов сущностей в виде атрибутов над свойством. (Например для Dictionary) Необходимо реализовать интерфейс JsonConverter или JsonConverter<T> И либо использовать атрибут [JsonConverter(typeof(ConverterImplementation))] либо задать JsonConverter в свойствах serializer.Converters.Add(new ConverterImplementation()) Если свойства CanRead/CanWrite задать false, то будет использоваться реализация по умолчанию
Абстрактные типы	Сериализатор не может самостоятельно десериализовать абстрактный тип т.к. не знает какую реализацию стоит использовать. Возможное решение: Поместить исходную json строку в context объекта сериализатора. (Тем самым мы получим возможность обратиться к нему из JsonConverter) Создать реализацию JsonConverter, которая будет извлекать json строку из context и выполнять анализ, на основе которого можно было бы разрешить тип абстрактного класса. (используя либо анализ строки, либо анализ JObject, либо десиреализацию части объекта) Навесить данный атрибут над свойством с абстрактным типом класса.
Даты	При сериализации даты по умолчанию используется формат timestamp с часовым поясом. Если не учитывать, можно получить смещение в несколько часов. !Дополнение: DateTimeOffset https://habr.com/ru/post/139803/
Изменить свойства.	how to update a particular value in json? https://stackoverflow.com/questions/19708889/how-to-update-a-particular-value-in-json
Циклические ссылки	Сериализация объектов с циклическими ссылками ReferenceLoopHandling https://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_ReferenceLoopHandling.htm
JSON Path	Querying JSON with complex JSON Path https://www.newtonsoft.com/json/help/html/QueryJsonSelectTokenJsonPath.htm JSONPath - XPath for JSON https://goessner.net/articles/JsonPath/