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

Версия 1.1 от Alexandr Fokin на 2022/07/22 04:09

Последние авторы
1 Возможна реализация собственной логики сериализации/десериализации для типа T и использование ее на уровне классов сущностей в виде атрибутов над свойством.
2 (Например для Dictionary)
3
4 Необходимо реализовать интерфейс JsonConverter или JsonConverter<T>
5 И либо использовать атрибут {{code language="c#"}}[JsonConverter(typeof(ConverterImplementation))]{{/code}}
6 либо задать JsonConverter в свойствах {{code language="c#"}}serializer.Converters.Add(new ConverterImplementation()){{/code}}
7 Если свойства CanRead/CanWrite задать false, то будет использоваться реализация по умолчанию
8
9 ----
10
11 Сериализатор не может самостоятельно десиреализовать абстрактный тип т.к. не знает какую реализацию стоит использовать. Возможное решение:
12 1) Поместить исходную json строку в context объекта сериализатора. (Тем самым мы получим возможность обратиться к нему из JsonConverter)
13 2) Создать реализацию JsonConverter, которая будет извлекать json строку из context и выполнять анализ, на основе которого можно было бы разрешить тип абстрактного класса. (используя либо анализ строки, либо анализ JObject, либо десиреализацию части объекта)
14 3) Навесить данный атрибут над свойством с абстрактным типом класса.
15
16 ----
17
18 При сериализации даты по умолчанию используется формат timestamp с часовым поясом. Если не учитывать, можно получить смещение в несколько часов.
19 !Дополнение:
20 DateTimeOffset
21 [[https:~~/~~/habr.com/ru/post/139803/>>url:https://habr.com/ru/post/139803/]]
22
23 ----
24
25 Изменить свойство в объекте.
26
27 how to update a particular value in json?
28 [[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]]
29
30 ----
31
32 Сериализация объектов с циклическими ссылками
33
34 ReferenceLoopHandling
35 [[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]]