MISE À JOUR [23/12/2019]: En partie à cause de la voix contribution de la communauté ce problème a été - ajouté à la feuille de route pour .NET 5.0.
MISE À JOUR [10/10/2019]: Si vous souhaitez voir ce comportement implémenté pourSystem.Text.Json.JsonSerializer
dirigez-vous vers le problème ouvert de GitHub souligné par Chris Yungmann et pesez.
Au lieu de cela:
JsonSerializerOptions options = new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase
// etc.
};
JsonSerializer.Deserialize<SomeObject>(someJsonString, options);
Je voudrais faire quelque chose comme ça:
// This property is a pleasant fiction
JsonSerializer.DefaultSettings = new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase
// etc.
};
// This uses my options
JsonSerializer.Deserialize<SomeObject>(someJsonString);
// And somewhere else in the same codebase...
// This also uses my options
JsonSerializer.Deserialize<SomeOtherObject>(someOtherJsonString);
L'espoir est de ne pas avoir à passer une instance de JsonSerializerOptions
pour nos cas les plus courants, et de remplacer pour l'exception, pas la règle.
Comme indiqué dans ce q & a , c'est une fonctionnalité utile de Json.Net. J'ai regardé dans la documentation pour System.Text.Json
ainsi que ce dépôt GitHub pour .NET Core. Et celui-ci .
Il ne semble pas y avoir d'analogue pour gérer les valeurs par défaut de sérialisation JSON dans .NET Core 3. Ou suis-je en train de l'ignorer?
Non, JsonSerializerOptions
n'expose pas le options par défaut . Si vous utilisez un cadre Web particulier, il peut y avoir un moyen de spécifier les paramètres de (dé-) sérialisation par ce biais. Sinon, je suggère de créer vos propres méthodes pratiques.
Voir aussi ce problème ouvert .
Vous pouvez créer une méthode d'extension. Voici un exemple
J'utilise des méthodes distinctes par rapport à la nécessité de créer des paramètres spéciaux, afin que tous les paramètres soient au même endroit et facilement réutilisables.
public static class DeserializeExtensions
{
private static JsonSerializerOptions defaultSerializerSettings = new JsonSerializerOptions();
// set this up how you need to!
private static JsonSerializerOptions featureXSerializerSettings = new JsonSerializerOptions();
public static T Deserialize<T>(this string json)
{
return JsonSerializer.Deserialize<T>(json, defaultSerializerSettings);
}
public static T DeserializeCustom<T>(this string json, JsonSerializerOptions settings)
{
return JsonSerializer.Deserialize<T>(json, settings);
}
public static T DeserializeFeatureX<T>(this string json)
{
return JsonSerializer.Deserialize<T>(json, featureXSerializerSettings);
}
}
Ensuite, vous l'appelez en tant que méthode sur une chaîne, qu'elle soit littérale ou variable.
Car result = @"{""Wheels"": 4, ""Doors"": 2}".DeserializeFeatureX<Car>();
Les options par défaut ne sont pas exposées dans JsonSerializer
pour .NET Core 3.1. Cependant, en décembre 2019, cela a été ajouté à la feuille de route pour 5.0.
La version de .NET 5.0 est prévue novembre 2020. Mais il n'y a aucune garantie que ce problème particulier sera résolu à un moment donné. Outre l'attente, ces réponses suggèrent des solutions:
Une solution de contournement a été proposée par l'utilisateur GitHub andre-ss6 comme suit:
((JsonSerializerOptions)typeof(JsonSerializerOptions)
.GetField("s_defaultOptions",
System.Reflection.BindingFlags.Static |
System.Reflection.BindingFlags.NonPublic).GetValue(null))
.PropertyNameCaseInsensitive = true;