2010-09-16 9 views
14

tengo lo que debería ser una cuestión relativamente simple que me parece que no puede encontrar una respuesta para.Desactivar Tipo Hinting en WCF Servicios JSON

Cuando WCF realiza su serialización de objetos, que se aplica de forma automática Tipo Hinting. Para los servicios de Json, esto da como resultado un campo adicional en cada objeto complejo llamado __type. Un objeto define como:

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

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

¿Sería serializar a algo como:

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

Normalmente esto no es un problema. Por desgracia, cuando se inicia clases de anidación en estructuras relativamente grandes y complejos, esto da lugar a una tonelada de sobrecarga en el tamaño de la respuesta JSON ir de vuelta al cliente.

Seguramente tiene que haber una forma de deshabilitar este comportamiento, pero no he podido encontrar ninguno (ni Rick Strahl back in 2007 ... pero es 2010 y espero que alguien haya descubierto esto).

Respuesta

5

Utilizando el DataContractJsonSerializer va a querer hacer esto para apoyar polimorfismo y ser capaz de volver a deserializar un tipo conocido. NewtonSoft es un serializador json de terceros que no agregará la sugerencia __type. Si solo está serializando y no está usando un avance avanzado de los atributos de DataContract, puede intentarlo.

7

Asumo que está utilizando <enableWebScript/> en la configuración del comportamiento, reemplace con que <webHttp defaultOutgoingResponseFormat="Json"/> y obtendrá agradable y limpio JSON

+0

Este falló cuando lo probé para 3.5SP1 .NET. ¿Es esto una cosa de 4.0 tal vez? –

+1

sólo he probado el 4, pero parece que en la documentación http://msdn.microsoft.com/en-us/library/system.servicemodel.description.webhttpbehavior.defaultoutgoingresponseformat(v=vs.90) .aspx http://msdn.microsoft.com/en-us/library/bb675191(v=vs.90).aspx – JeremyWeir

+0

Funcionó para mí, gracias – bladefist

3

Esto hizo el truco para mí:

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

consulte los pasos 7 y el 10 de http://dotnetdiscoveries.blogspot.com/2008/05/return-json-from-ajax-enabled-wcf.html

+1

Esto también funcionó para mí - También tuve que cambiar la fábrica en mi archivo svc de WebScriptserviceHostFactory a WebServiceHostFactory. –

+0

Esto no funcionó para mí. Ya configuré mi app.config como se indica y todavía recibo la propiedad '__type' – CJLopez

Cuestiones relacionadas