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
Susan Sarandonoriginal
2025-01-14 07:22:45917parcourir

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>

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>

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!

Déclaration:
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