Отключить подсказку типа в службах WCF JSON - PullRequest
14 голосов
/ 16 сентября 2010

У меня есть относительно простой вопрос, на который я не могу найти ответ.

Когда WCF выполняет сериализацию объектов, он автоматически применяет тип подсказки. Для сервисов Json это приводит к появлению дополнительного поля для каждого сложного объекта с именем __type. Объект, определенный как:

[DataContract]
public class SomeObject
{
    [DataMember]
    public string First { get; set; }

    [DataMember]
    public string Last { get; set; }
}

Сериализовал бы что-то вроде:

{
    "First" : "Hello",
    "Last" : "World!",
    "__type" : "SomeObject#MyNamespace.SomeObject"
}

Обычно это не проблема. К сожалению, когда вы начинаете вложение классов в довольно большие и сложные структуры, это приводит к огромным накладным расходам на размер ответа JSON, возвращаемого клиенту.

Конечно, должен быть способ отключить это поведение, но я не смог его найти (ни один не имел Рика Штраля в 2007 году ... но это 2010 год, и я надеюсь, что кто-то понял это вышло).

Ответы [ 3 ]

7 голосов
/ 03 июня 2011

Я предполагаю, что вы используете <enableWebScript/> в своей конфигурации поведения, замените его на <webHttp defaultOutgoingResponseFormat="Json"/>, и вы получите хороший и чистый json

5 голосов
/ 17 октября 2010

Использование DataContractJsonSerializer поможет сделать это для поддержки полиморфизма и возможности десериализации обратно до известного типа.NewtonSoft - сторонний json-сериализатор, который не добавляет подсказку __type.Если вы просто сериализуете и не используете действительно продвинутые атрибуты DataContract, вы можете попробовать.

3 голосов
/ 09 сентября 2011

Это помогло мне:

[WebGet(ResponseFormat=WebMessageFormat.Json,BodyStyle = WebMessageBodyStyle.Bare)]

См. Шаги 7 и 10 из http://dotnetdiscoveries.blogspot.com/2008/05/return-json-from-ajax-enabled-wcf.html

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