Gestion de l'utilisation du constructeur dans JSON.net Desérialisation
La bibliothèque JSON.NET de.net utilise généralement le constructeur par défaut lors de la désérialisation des données JSON dans des objets. Cependant, si une classe a à la fois un constructeur par défaut et un constructeur surchargé, JSON.net peut par défaut le constructeur sans paramètre, même si vous avez l'intention d'en utiliser un autre.
Pour spécifier quel constructeur json.net doit utiliser, utilisez l'attribut [JsonConstructor]
. Cet attribut désigne le constructeur marqué pour la désérialisation.
<code class="language-csharp">[JsonConstructor] public Result(int? code, string format, Dictionary<string, string> details = null) { // ... constructor logic ... }</code>
Les paramètres du constructeur doivent correspondre aux noms de propriétés JSON (insensible à la casse). Il n'est pas obligatoire de cartographier chaque propriété à un paramètre de constructeur; JSON.net tentera de remplir les propriétés restantes à l'aide de setters publics ou d'attributs comme [JsonProperty]
.
Si les attributs ne conviennent pas ou si vous ne pouvez pas modifier la classe désérialisée, créez une personnalité JsonConverter
. Cela vous donne un contrôle total sur l'instanciation et la population des objets.
voici un exemple de convertisseur personnalisé:
<code class="language-csharp">class ResultConverter : JsonConverter { public override bool CanConvert(Type objectType) { return (objectType == typeof(Result)); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { // ... custom deserialization logic ... } public override bool CanWrite => false; public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { throw new NotImplementedException(); } }</code>
Pour utiliser ce convertisseur personnalisé, ajoutez-le à vos paramètres de sérialiseur:
<code class="language-csharp">JsonSerializerSettings settings = new JsonSerializerSettings(); settings.Converters.Add(new ResultConverter()); Result result = JsonConvert.DeserializeObject<Result>(jsontext, settings);</code>
Ces méthodes assurent un contrôle précis sur la sélection du constructeur pendant la désérialisation JSON.net, même avec un constructeur par défaut présent, garantissant une initialisation d'objets corrects.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!