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 :
JsonSerializerOptions.IncludeFields
sur true
[JsonInclude]
des attributs aux champsExemple :
<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!