Отключить ввод типов в WCF JSON Services

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

Когда WCF выполняет сериализацию объектов, он автоматически применяет Type Hinting. Для служб 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, возвращаемого клиенту.

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

Ответы

Ответ 1

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

Ответ 2

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