Je comprends que l’API Web ASP.NET utilise nativement Json.NET pour la (dé) sérialisation des objets, mais existe-t-il un moyen de spécifier un objet JsonSerializerSettings
que vous souhaitez utiliser?
Par exemple, si je voulais inclure les informations type
dans la chaîne JSON sérialisée? Normalement, j'injecte des paramètres dans l'appel .Serialize()
, mais l'API Web le fait en mode silencieux. Je n'arrive pas à trouver un moyen d'injecter les paramètres manuellement.
Vous pouvez personnaliser le JsonSerializerSettings
en utilisant le Formatters.JsonFormatter.SerializerSettings
propriété dans l'objet HttpConfiguration
.
Par exemple, vous pouvez le faire dans la méthode Application_Start ():
protected void Application_Start()
{
HttpConfiguration config = GlobalConfiguration.Configuration;
config.Formatters.JsonFormatter.SerializerSettings.Formatting =
Newtonsoft.Json.Formatting.Indented;
}
Vous pouvez spécifier JsonSerializerSettings
pour chaque JsonConvert
et définir une valeur par défaut globale.
Unique JsonConvert
avec une surcharge:
// 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
}
);
Paramètre global avec du code dans Application_Start()
dans Global.asax.cs:
JsonConvert.DefaultSettings = () => new JsonSerializerSettings {
Formatting = Newtonsoft.Json.Formatting.Indented,
ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
};
Référence: https://github.com/JamesNK/Newtonsoft.Json/issues/78
Answer ajoute ces 2 lignes de code à la méthode Global.asax.cs Application_Start
var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling =
Newtonsoft.Json.PreserveReferencesHandling.All;
Référence: Gestion des références d'objet circulaire