Переименуйте __type-field в сервисах WCF

2

Я пытаюсь сопоставить GeoJSON с DataContracts для использования в некоторых WCF-сервисах на работе. GeoJSON имеет поле под названием "тип", а сериализация DataContracts зависит от поля "__type", чтобы поддерживать/сериализацию в правильные подтипы. Мои DataContracts все названы в честь спецификации GeoJSON, и я установил пространство имен DataContracts в "", поэтому в основном мне удалось реализовать GeoJSON < == > DataContracts, если бы я мог сказать сериализатору (de) использовать поле "тип" вместо поля "__type".

Можно ли вообще сказать WCF или DataContract сериализаторы, в каком поле искать информацию о типе? Как можно было бы поддержать стандарт JSON, который фактически использует поле __type?

Теги:
wcf
datacontractserializer

1 ответ

1
Лучший ответ

Вы не можете. __type жестко закодирован на самом базовом уровне в DataContractJsonSerializer.

Один из возможных вариантов заключается в том, чтобы обернуть это вокруг ПОСЛЕДОВАТЕЛЬНОГО сериализатора данных, анализатора контрактов данных или суррогата сущности данных, чтобы отобразить все, что есть в типе __type, чтобы напечатать (при сериализации) и передать все, что находится в типе, в __type (on десериализации). Это дополнительная ручная работа, которая является довольно головной болью.

Другой вариант, который у вас есть, - написать собственный сериализатор. Это не так сложно сделать, как вы думаете, если вы просто посмотрите, как DataContractJsonSerializer через Reflector, и имитирует его с вашим автором и читателем, а также анализирует, где используется или создается экземпляр DataContractJsonSerializer.

Третий вариант, который у вас есть, - это просто, возможно, другой сериализатор, как JSON.NET

Четвертый вариант - использовать MicrosoftAjax.js, который понимает __type, а затем каким-то образом использует его совместно с GeoJSON (я не знаю, возможно ли это, но просто выбрасываю его как потенциальную идею)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню