когда DataContractJsonSerializer включает информацию о типе? - PullRequest
8 голосов
/ 03 февраля 2011

Я заметил, что в DataContractJsonSerializer сериализованная строка JSON иногда включает информацию о типе в виде

{"__type":"MyClass:#MyNamespace", ... }

, основываясь на моих наблюдениях, кажется, что это происходит только при сериализации базового типа, но1004 * известный подтип передается взамен, что имеет смысл, но я не нашел никаких официальных документов, подтверждающих это или, в любом случае, заставляющих сериализатор постоянно демонстрировать это поведение всякий раз, когда он встречает пользовательский тип.

Может ли кто-нибудь подтвердить правильность моих наблюдений?Еще лучше, если вы знаете способ дать сериализатору команду всегда сериализовать информацию о типе для пользовательских типов, если это вообще возможно?

Спасибо,

1 Ответ

14 голосов
/ 08 февраля 2011

На самом деле вы МОЖЕТЕ заставить сериализатор всегда последовательно передавать информацию __type.

Если вы используете автономный сериализатор, используйте constructor overload, который принимает аргумент AlwaysEmitTypeInformation. Проход в истине.

Если вы используете DataContractJsonSerializerOperationBehavior, присвойте тому же свойству этого атрибута значение true. Я считаю, что вы также можете сделать это через конфиг.

Наконец, см. Раздел «Когда испускаются подсказки типа» в http://msdn.microsoft.com/en-us/library/bb412170.aspx для более подробного объяснения.

Надеюсь, это поможет!

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