Какой JsonConverter по умолчанию используется в JSON.NET? - PullRequest
24 голосов
/ 04 мая 2011

Я пытаюсь написать собственный JsonConverter для случаев, когда человек подклассирует список или коллекцию, но затем добавляет дополнительные свойства к подклассу (см. здесь ). Текущая реализация JSON.NET просто меняет список на массив дочерних объектов и игнорирует все добавленные свойства. Поэтому я хочу написать новый JsonConverter, который будет обрабатывать объект, как если бы он не был списком, и просто сериализовать все остальное как обычно, но затем добавить новое свойство в сериализацию, называемое _Items, где фактический массив данных сохраняется.

Теперь я уже написал класс, который делает именно это для нашего конкретного подкласса List, но мне пришлось вручную указывать все свойства по одному. Но если бы я мог написать конвертер, который рассматривал бы это как обычный объект, а затем вручную обрабатывать элементы, я был бы золотым. Мне даже не важно, получу ли я в итоге половину другого класса (или даже больше!), Но я бы хотел сделать конвертер многократного использования для этих случаев. Однако, как я уже сказал, я не могу найти конвертер по умолчанию для запуска.

Так ... кто-нибудь знает, где это?

1 Ответ

15 голосов
/ 11 сентября 2013

В JSON.NET нет конвертера по умолчанию.

Если вы можете проверить класс JsonSerializerInternalWriter , посмотрите на метод SerializeValue. В нем сверху находится фаза «найти и выполнить конвертер». Однако, если нет соответствующего преобразователя, он прибегает к сериализации типа контракта (оператор switch).

Я не нашел способа (правильный способ или изящный взлом), чтобы иметь возможность выполнять обобщенную сериализацию контракта (например, синтаксический анализ объекта как обычно) с расширенной настраиваемой сериализацией для объекта (который, я полагаю, вы пытаюсь сделать).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...