最近、ソリューションをすべて.NET Core 3にアップグレードしました。クラス変数をフィールドにする必要があるクラスがあります。新しいSystem.Text.Json.JsonSerializer
はフィールドのシリアル化も非シリアル化もサポートせず、代わりにプロパティのみを処理するため、これは問題です。
以下の例の2つの最後のクラスが同じ正確な値を持つことを保証する方法はありますか?
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!
}
現在、フィールドはシリアライズ可能ではありません。しかし、開発作業が進行中です。あなたは this thread に従うことができます。
私がSystem.Text.Jsonの拡張機能として書いたこのライブラリを試してみて、不足している機能を提供してください: https://github.com/dahomey-technologies/Dahomey.Json 。
フィールドのサポートが見つかります。
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
}