Я пытаюсь сопоставить GeoJSON с DataContracts для использования в некоторых WCF-сервисах на работе. GeoJSON имеет поле под названием "тип", а сериализация DataContracts зависит от поля "__type", чтобы поддерживать/сериализацию в правильные подтипы. Мои DataContracts все названы в честь спецификации GeoJSON, и я установил пространство имен DataContracts в "", поэтому в основном мне удалось реализовать GeoJSON < == > DataContracts, если бы я мог сказать сериализатору (de) использовать поле "тип" вместо поля "__type".
Можно ли вообще сказать WCF или DataContract сериализаторы, в каком поле искать информацию о типе? Как можно было бы поддержать стандарт JSON, который фактически использует поле __type?
Вы не можете. __type жестко закодирован на самом базовом уровне в DataContractJsonSerializer.
Один из возможных вариантов заключается в том, чтобы обернуть это вокруг ПОСЛЕДОВАТЕЛЬНОГО сериализатора данных, анализатора контрактов данных или суррогата сущности данных, чтобы отобразить все, что есть в типе __type, чтобы напечатать (при сериализации) и передать все, что находится в типе, в __type (on десериализации). Это дополнительная ручная работа, которая является довольно головной болью.
Другой вариант, который у вас есть, - написать собственный сериализатор. Это не так сложно сделать, как вы думаете, если вы просто посмотрите, как DataContractJsonSerializer через Reflector, и имитирует его с вашим автором и читателем, а также анализирует, где используется или создается экземпляр DataContractJsonSerializer.
Третий вариант, который у вас есть, - это просто, возможно, другой сериализатор, как JSON.NET
Четвертый вариант - использовать MicrosoftAjax.js, который понимает __type, а затем каким-то образом использует его совместно с GeoJSON (я не знаю, возможно ли это, но просто выбрасываю его как потенциальную идею)