Исходный код вики Сценарии

Редактировал(а) Alexandr Fokin 2023/11/11 13:29

Последние авторы
1 |(% style="width:239px" %)JsonConverter.
2 \\Реализация собственной логики сериализации (десериализации) для типа.|(% style="width:1254px" %)(((
3 Возможна реализация собственной логики сериализации (десериализации) для типа T и использование ее на уровне классов сущностей в виде атрибутов над свойством.
4 (Например для Dictionary)
5
6 Необходимо реализовать интерфейс JsonConverter или JsonConverter<T>
7 И либо использовать атрибут {{code language="c#"}}[JsonConverter(typeof(ConverterImplementation))]{{/code}}
8 либо задать JsonConverter в свойствах {{code language="c#"}}serializer.Converters.Add(new ConverterImplementation()){{/code}}
9 Если свойства CanRead/CanWrite задать false, то будет использоваться реализация по умолчанию
10 )))
11 |(% style="width:239px" %)Абстрактные типы|(% style="width:1254px" %)Сериализатор не может самостоятельно десериализовать абстрактный тип т.к. не знает какую реализацию стоит использовать.
12 Возможное решение:(((
13 1. Поместить исходную json строку в context объекта сериализатора. (Тем самым мы получим возможность обратиться к нему из JsonConverter)
14 1. Создать реализацию JsonConverter, которая будет извлекать json строку из context и выполнять анализ, на основе которого можно было бы разрешить тип абстрактного класса. (используя либо анализ строки, либо анализ JObject, либо десиреализацию части объекта)
15 1. Навесить данный атрибут над свойством с абстрактным типом класса.
16 )))
17 |(% style="width:239px" %)Даты|(% style="width:1254px" %)При сериализации даты по умолчанию используется формат timestamp с часовым поясом. Если не учитывать, можно получить смещение в несколько часов.
18 \\!Дополнение:
19 DateTimeOffset
20 [[https:~~/~~/habr.com/ru/post/139803/>>url:https://habr.com/ru/post/139803/]]
21 |(% style="width:239px" %)Изменить свойства.|(% style="width:1254px" %)(((
22 how to update a particular value in json?
23 [[https:~~/~~/stackoverflow.com/questions/19708889/how-to-update-a-particular-value-in-json>>url:https://stackoverflow.com/questions/19708889/how-to-update-a-particular-value-in-json]]
24 )))
25 |(% style="width:239px" %)Циклические ссылки|(% style="width:1254px" %)(((
26 Сериализация объектов с циклическими ссылками
27
28 ReferenceLoopHandling
29 [[https:~~/~~/www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_ReferenceLoopHandling.htm>>url:https://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_ReferenceLoopHandling.htm]]
30 )))
31 |(% style="width:239px" %)JSON Path|(% style="width:1254px" %)Querying JSON with complex JSON Path
32 [[https:~~/~~/www.newtonsoft.com/json/help/html/QueryJsonSelectTokenJsonPath.htm>>url:https://www.newtonsoft.com/json/help/html/QueryJsonSelectTokenJsonPath.htm]]
33 \\JSONPath - XPath for JSON
34 [[https:~~/~~/goessner.net/articles/JsonPath/>>url:https://goessner.net/articles/JsonPath/]]