Maison > développement back-end > C++ > Comment puis-je contrôler quel constructeur json.net utilise pendant la désérialisation?

Comment puis-je contrôler quel constructeur json.net utilise pendant la désérialisation?

Patricia Arquette
Libérer: 2025-01-29 16:46:10
original
597 Les gens l'ont consulté

How Can I Control Which Constructor JSON.NET Uses During Deserialization?

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal