Комментарий к Newtonsoft.Json

Версия 2.1 от Alexandr Fokin на 2020/03/30 10:47

  • Alexandr Fokin
    Alexandr Fokin 2020/02/13 17:15

    Возможна реализация собственной логики сериализации/десериализации для типа T и использование ее на уровне классов сущностей в виде атрибутов над свойством.
    (Например для Dictionary)

    Необходимо реализовать интерфейс JsonConverter или JsonConverter<T>
    И либо использовать атрибут [JsonConverter(typeof(ConverterImplementation))]
    либо задать JsonConverter в свойствах serializer.Converters.Add(new ConverterImplementation())
    Если свойства CanRead/CanWrite задать false, то будет использоваться реализация по умолчанию

  • Alexandr Fokin
    Alexandr Fokin 2020/02/24 02:12

    Сереализатор не может самостоятельно десереализовать абстрактный тип т.к. не знает какую реализацию стоит использовать. Возможное решение:
    1) Поместить исходную json строку в context объекта сериализатора. (Тем самым мы получим возможность обратиться к нему из JsonConverter)
    2) Создать реализацию JsonConverter, которая будет извлекать json строку из context и выполнять анализ, на основе которого можно было бы разрешить тип абстрактного класса. (используя либо анализ строки, либо анализ JObject, либо десереализацию части объекта)
    3) Навесить данный атрибут над свойством с абстрактным типом класса.