Come impostare JSONSerializerSettings personalizzate per Json.NET in MVC 4 Web API?

Comprendo che l’API Web ASP.NET utilizza in modo nativo Json.NET per la (serializzazione) degli oggetti, ma esiste un modo per specificare un object JsonSerializerSettings che si desidera venga utilizzato?

Ad esempio, cosa succede se volessi includere le informazioni sul type nella stringa JSON serializzata? Normalmente .Serialize() le impostazioni nella chiamata .Serialize() , ma l’API Web lo fa in silenzio. Non riesco a trovare un modo per iniettare le impostazioni manualmente.

È ansible personalizzare JsonSerializerSettings utilizzando la proprietà Formatters.JsonFormatter.SerializerSettings nell’object HttpConfiguration .

Ad esempio, puoi farlo nel metodo Application_Start ():

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

È ansible specificare JsonSerializerSettings per ogni JsonConvert ed è ansible impostare un valore globale predefinito.

Singolo JsonConvert con un sovraccarico:

 // 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 } ); 

Impostazioni globali con codice in Application_Start() in Global.asax.cs:

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

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

La risposta sta aggiungendo queste 2 righe di codice al metodo Application_Start di Global.asax.cs

 var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter; json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.All; 

Riferimento: gestione dei riferimenti a oggetti circolari