Maison > développement back-end > C++ > Comment puis-je sérialiser et désérialiser des champs à l'aide de System.Text.Json ?

Comment puis-je sérialiser et désérialiser des champs à l'aide de System.Text.Json ?

Susan Sarandon
Libérer: 2025-01-14 07:22:45
original
840 Les gens l'ont consulté

How Can I Serialize and Deserialize Fields Using System.Text.Json?

System.Text.Json : Champs de sérialisation et de désérialisation

Dans les versions .NET plus récentes, System.Text.Json.JsonSerializer est la méthode de sérialisation et de désérialisation JSON préférée. Cependant, cela pose un défi pour les classes contenant des variables de champ, car celles-ci ne sont pas prises en charge par défaut.

Le problème

Dans les anciennes versions de .NET, les variables de champ pouvaient être incluses dans le processus de sérialisation/désérialisation. Avec l'introduction de JsonSerializer, seuls les attributs sont pris en charge, ce qui entraîne les problèmes suivants :

<code class="language-csharp">using System.Text.Json;

public class Car
{
    public int Year { get; set; } // 正确序列化
    public string Model; // 未正确序列化(字段变量)
}

static void Problem()
{
    Car car = new Car()
    {
        Model = "Fit",
        Year = 2008,
    };
    string json = JsonSerializer.Serialize(car); // {"Year":2008}
    Car carDeserialized = JsonSerializer.Deserialize<Car>(json);

    Console.WriteLine(carDeserialized.Model); // null!
}</code>
Copier après la connexion

Solution

Pour résoudre ce problème, deux stratégies existent :

1. .NET 5 et supérieur

À partir de .NET 5, les champs publics peuvent être sérialisés et désérialisés via :

  • Régler JsonSerializerOptions.IncludeFields sur true
  • Ajouter [JsonInclude] des attributs aux champs

Exemple :

<code class="language-csharp">using System.Text.Json;
using System.Text.Json.Serialization;

static void Main()
{
    var car = new Car { Model = "Fit", Year = 2008 };

    // 启用支持
    var options = new JsonSerializerOptions { IncludeFields = true };

    // 传递“options”
    var json = JsonSerializer.Serialize(car, options);

    // 传递“options”
    var carDeserialized = JsonSerializer.Deserialize<Car>(json, options);

    Console.WriteLine(carDeserialized.Model); // 输出 "Fit"
}

public class Car
{
    public int Year { get; set; }
    [JsonInclude]
    public string Model;
}</code>
Copier après la connexion

2. .NET Core 3.x

Dans .NET Core 3.x, la sérialisation des champs n'est pas prise en charge. Pour contourner ce problème, envisagez d'utiliser un convertisseur personnalisé pour obtenir le comportement souhaité.

Pour plus d'informations et une documentation détaillée, veuillez vous référer aux ressources suivantes :

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