c# - newtonsoft - ¿Cómo configurar JsonSerializerSettings personalizados para Json.NET en MVC 4 Web API?
web api return json example (3)
La respuesta es agregar estas 2 líneas de código al método Global.asax.cs Application_Start
var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling =
Newtonsoft.Json.PreserveReferencesHandling.All;
Referencia: manejo de referencias de objetos circulares
Entiendo que ASP.NET Web API usa nativamente Json.NET para (de) serializar objetos, pero ¿hay alguna manera de especificar un objeto JsonSerializerSettings
que desee que use?
Por ejemplo, ¿qué pasaría si quisiera incluir información de type
en la cadena serial JSON? Normalmente, inyectaría ajustes en la llamada a .Serialize()
, pero la API web lo hace de forma silenciosa. No puedo encontrar una forma de inyectar configuraciones manualmente.
Puede especificar JsonSerializerSettings
para cada JsonConvert
y 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 código en Application_Start()
en 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
Puede personalizar JsonSerializerSettings
utilizando la propiedad Formatters.JsonFormatter.SerializerSettings
en el objeto HttpConfiguration
.
Por ejemplo, puedes hacer eso en el método Application_Start ():
protected void Application_Start()
{
HttpConfiguration config = GlobalConfiguration.Configuration;
config.Formatters.JsonFormatter.SerializerSettings.Formatting =
Newtonsoft.Json.Formatting.Indented;
}