J'ai récemment mis à niveau une solution pour qu'elle soit entièrement .NET Core 3 et j'ai une classe qui nécessite que les variables de classe soient des champs. Il s'agit d'un problème car le nouveau System.Text.Json.JsonSerializer
ne prend pas en charge la sérialisation ni la désérialisation des champs mais gère uniquement les propriétés à la place.
Existe-t-il un moyen de garantir que les deux classes finales dans l'exemple ci-dessous ont les mêmes valeurs exactes?
using System.Text.Json;
public class Car
{
public int Year { get; set; } // does serialize correctly
public string Model; // doesn't serialize correctly
}
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!
}
Actuellement, les champs ne sont pas sérialisables. Mais il y a un travail de développement en cours. Vous pouvez suivre ce fil .
Veuillez essayer cette bibliothèque que j'ai écrite comme une extension de System.Text.Json pour offrir les fonctionnalités manquantes: https://github.com/dahomey-technologies/Dahomey.Json .
Vous trouverez un support pour les champs.
using System.Text.Json;
using Dahomey.Json
public class Car
{
public int Year { get; set; } // does serialize correctly
public string Model; // will serialize correctly
}
static void Problem() {
JsonSerializerOptions options = new JsonSerializerOptions();
options.SetupExtensions(); // extension method to setup Dahomey.Json extensions
Car car = new Car()
{
Model = "Fit",
Year = 2008,
};
string json = JsonSerializer.Serialize(car, options); // {"Year":2008,"Model":"Fit"}
Car carDeserialized = JsonSerializer.Deserialize<Car>(json);
Console.WriteLine(carDeserialized.Model); // Fit
}