les paramètres du sérialiseur json pour les applications principales héritées asp.net ont été définis en ajoutant AddMvc().AddJsonOptions()
, mais je n'utilise pas AddMvc()
dans asp.net core 3
. Alors, comment puis-je définir les paramètres de sérialisation json globaux?
AddMvc
renvoie une implémentation IMvcBuilder
, qui a une méthode d'extension AddJsonOptions
correspondante. Les méthodes de nouveau style AddControllers
, AddControllersWithViews
et AddRazorPages
renvoient également une implémentation IMvcBuilder
. Chaînez avec ceux-ci de la même manière que vous chaîneriez avec AddMvc
:
services.AddControllers()
.AddJsonOptions(options =>
{
// ...
});
Notez que options
ici n'est plus pour Json.NET, mais pour le plus récent System.Text.Json
API. Si vous voulez toujours utiliser Json.NET, voir réponse de tymtam
Il s'agit toujours de MVC et nécessite le package de nuget Microsoft.AspNetCore.Mvc.NewtonsoftJson, mais vous avez dit que vous utilisez AddControllers
.
De Ajouter la prise en charge du format JSON basé sur Newtonsoft.Json
services.AddControllers().AddNewtonsoftJson(options =>
{
// Use the default property (Pascal) casing
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
// Configure a custom converter
options.SerializerOptions.Converters.Add(new MyCustomJsonConverter());
});
JsonConvert.DefaultSettings = () => new JsonSerializerSettings (...)
propriété JsonConvert.DefaultSettings
Obtient ou définit une fonction qui crée JsonSerializerSettings par défaut. Les paramètres par défaut sont automatiquement utilisés par les méthodes de sérialisation sur JsonConvert et ToObject () et FromObject (Object) sur JToken. Pour sérialiser sans utiliser de paramètres par défaut, créez un JsonSerializer avec Create ().
L'ajout de Newtonsoft n'est pas nécessaire, ce qui pose un problème lors de l'ajout de packages de compatibilité Newtonsoft sur le projet .Net Core 3.0.
Voir aussi https://github.com/aspnet/AspNetCore/issues/13564
Bien sûr, on célébrerait le nom de propriété PascalCase
, NA pour le moment ... Donc null
pour PropertyNamingPolicy
signifie PascalCase, ce qui n'est évidemment pas très bon.
// Pascal casing
services.AddControllersWithViews().
AddJsonOptions(options =>
{
options.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
options.JsonSerializerOptions.PropertyNamingPolicy = null;
});