ホームページ >バックエンド開発 >C++ >System.Text.Json を使用してフィールドをシリアル化および逆シリアル化するにはどうすればよいですか?

System.Text.Json を使用してフィールドをシリアル化および逆シリアル化するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-14 07:22:45841ブラウズ

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

System.Text.Json: シリアル化フィールドと逆シリアル化フィールド

新しい .NET バージョンでは、System.Text.Json.JsonSerializer が JSON シリアル化および逆シリアル化方法として推奨されます。ただし、フィールド変数はデフォルトではサポートされていないため、フィールド変数を含むクラスには問題が生じます。

問題

.NET の古いバージョンでは、シリアル化/逆シリアル化プロセスにフィールド変数が含まれる可能性がありました。 JsonSerializer の導入により、属性のみがサポートされるため、次の問題が発生します:

<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>

解決策

この問題を解決するには、2 つの戦略があります:

1. .NET 5 以降

.NET 5 以降、パブリック フィールドは次の方法でシリアル化および逆シリアル化できるようになりました。

  • JsonSerializerOptions.IncludeFieldstrue
  • に設定します
  • [JsonInclude] 属性をフィールドに追加します

例:

<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

.NET Core 3.x では、フィールドのシリアル化はサポートされていません。回避策として、カスタム コンバータを使用して目的の動作を実現することを検討してください。

詳細と詳細なドキュメントについては、次のリソースを参照してください:

以上がSystem.Text.Json を使用してフィールドをシリアル化および逆シリアル化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。