35 votos

Cómo configurar de forma personalizada para JsonSerializerSettings Json.NET en MVC 4 Web API?

Entiendo que ASP.NET API Web utiliza de forma nativa Json.NET para (de)que la serialización de objetos, pero hay una manera de especificar un JsonSerializerSettings objeto que desea utilizar?

Por ejemplo, si lo que quería incluir type de la información en la serializado cadena JSON? Normalmente me iba a inyectar en la configuración de la .Serialize() de llamadas, pero en la Web de la API hace que de forma silenciosa. No puedo encontrar una manera de inyectar manualmente la configuración.

65voto

carlosfigueira Puntos 40778

Usted puede personalizar el JsonSerializerSettings mediante el uso de la Formatters.JsonFormatter.SerializerSettings de propiedad en la HttpConfiguration objeto.

Por ejemplo, usted podría hacer que en el Application_Start() método:

protected void Application_Start()
{
    HttpConfiguration config = GlobalConfiguration.Configuration;
    config.Formatters.JsonFormatter.SerializerSettings.Formatting =
        Newtonsoft.Json.Formatting.Indented;
}

16voto

smockle Puntos 397

Puede especificar JsonSerializerSettings por cada JsonConvert, y se puede establecer un valor predeterminado global.

Solo JsonConvert con una sobrecarga:

// Option #1.
JsonSerializerSettings config = new JsonSerializerSettings { ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore };
this.json = JsonConvert.SerializeObject(YourObject, Formatting.Indented, config);

// Option #2 (inline).
JsonConvert.SerializeObject(YourObject, Formatting.Indented,
    new JsonSerializerSettings() {
        ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
    }
);

Configuración Global con el código en Application_Start() en el Global.asax.cs:

JsonConvert.DefaultSettings = () => new JsonSerializerSettings {
     Formatting = Newtonsoft.Json.Formatting.Indented,
     ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
};

Referencia: https://github.com/JamesNK/Newtonsoft.Json/issues/78

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: