Как я могу исключить информацию Типа из DataContract? - PullRequest
4 голосов
/ 10 сентября 2010

Я хочу исключить ключ и значение __type из моей сериализации:

{"__type":"Entity:#Runtime.DataBus","Children":[],"Fields":[{"Key":"field1","Value":"10"},{"Key":"fieldString1","Value":"field1 init"},{"Key":"fieldString2","Value":"field2 init"}],"Name":"Entity1"}

Я использую System.Runtime.Serialization.Json.DataContractJsonSerializer.

Мне пришлось пометить Типы как KnownTypes, и, похоже, именно это затягивает __type в сериализацию.

Я не хочу это в моем объекте, как это можно сделать?

Без использования атрибута KnownType в классе с DataContract он будет работать, но без него в этом классе я получу всевозможные исключения для типов этого класса.

Ответы [ 2 ]

3 голосов
/ 29 апреля 2014

В новых версиях вы можете использовать следующий код

DataContractJsonSerializerSettings settings = new DataContractJsonSerializerSettings();
settings.EmitTypeInformation = System.Runtime.Serialization.EmitTypeInformation.Never;
2 голосов
/ 18 марта 2011

Я могу однозначно сказать, что нет способа сделать это, если вы не сериализуете тип в полиморфных сценариях.

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

В сериализаторе JSON есть флаг AlwaysEmitTypeInformation, но это то, что вы включаете, чтобы всегда излучать __type.Теперь есть способ отключить его, главным образом, чтобы избежать непреднамеренных ошибок пользователя.

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