【System.Text.Json】オブジェクトのデータを保存する方法

マイクロソフトが、JSONを扱うライブラリを提供しました。これまで、NettonSoftをインストールしコードを書いていたケースで適用することができることがあります。

シリアライズとでシリアライズ

シリアライズ

シリアライズとは、複数の並列データを直列化して送信すること。
具体的には、メモリ上に存在する情報を、ファイルとして保存したり、ネットワークで送受信したりできるように変換すること。オブジェクト(インスタンス)を保存できるようにテキスト(JSONなど)やバイナリにデータ化すること

デシリアライズ

既にファイルとして存在しているデータや、一旦シリアライズされたデータがネットワークから送られてきた際に、プログラムで扱えるようにする作業。オブジェクト(インスタンス)を復元する

サンプルの作成

VisualStudio バージョン

Microsoft Visual Studio Community 2019 Version 16.8.4

フレームワークのバージョン

.NET 5.0

次のような商品クラスを作成します

// 商品
class Product
{
    // 商品名
    public string Name { get; set; }
    // 賞味期限
    public DateTime Expiry { get; set; }
    // 大きさの種類
    public string[] Sizes { get; set; }
}

クラスからインスタンスを作成し、データをセットしましょう

必要に応じて、クラスを作成してください。

// 商品
Product product = new Product();
// 名称
product.Name = "Apple";
// 賞味期限
product.Expiry = new DateTime(2020, 1, 28);
// 大きさの種類
product.Sizes = new string[] { "Small" };

インスタンスをシリアライズ化します

必要に応じて、参照の追加、usingを追加します。

変換オプションをつけます

JsonSerializerOptions options = new JsonSerializerOptions
{
    // 日本語が表示できるようにする
    Encoder = JavaScriptEncoder.Create(UnicodeRanges.All),
    // インデントフォーマットあり
    WriteIndented = true
};

上記オプションをつけてシリアライズ化します

// オブジェクトからJSON文字列を作成
string json = JsonSerializer.Serialize(product, options);

ファイルに書き出します

必要に応じて、usingを追加します。
ファイルに書き出されていることを確認します。

// ファイルに出力
File.WriteAllText("product.json", json);

コンソール画面に出力します

確認のため、画面にも表示します。

// 画面に出力
Console.WriteLine(json);

ファイルから読み込みます

// 保存されたJSON文字列を読み取り
string ResumeJson = File.ReadAllText("product.json");

JSON文字列から、オブジェクトを復元します

// JSON文字列からオブジェクトを復元
Product product1 = JsonSerializer.Deserialize<Product>(ResumeJson);

復元されたオブジェクトの表示確認

// オブジェクトの名前情報を表示
Console.WriteLine(product1.Name);

JsonSerializer クラスのドキュメント

サンプル集

表示サンプル

{
    "Name": "Apple",
    "Expiry": "2020-01-28T00:00:00",
    "Sizes": [
    "Small"
    ]
}
Apple

全コード

using System;
using System.IO;
using System.Text.Encodings.Web;
using System.Text.Json;
using System.Text.Unicode;

namespace JsonSample
{
    class Program
    {
        static void Main(string[] args)
        {
            // 商品
            Product product = new Product();
            // 名称
            product.Name = "Apple";
            // 賞味期限
            product.Expiry = new DateTime(2020, 1, 28);
            // 大きさの種類
            product.Sizes = new string[] { "Small" };

            JsonSerializerOptions options = new JsonSerializerOptions
            {
                // 日本語が表示できるようにする
                Encoder = JavaScriptEncoder.Create(UnicodeRanges.All),
                // インデントフォーマットあり
                WriteIndented = true
            };

            // オブジェクトからJSON文字列を作成(インデントフォーマットあり)
            string json = JsonSerializer.Serialize(product, options);
            // ファイルに出力
            File.WriteAllText("product.txt", json);
            // 画面に出力
            Console.WriteLine(json);

            // 保村されたJSONを読み取り
            string ResumeJson = File.ReadAllText("product.txt");
            // JSONデータからオブジェクトを復元
            Product product1 = JsonSerializer.Deserialize<Product>(ResumeJson);

            // オブジェクトの名前情報を表示
            Console.WriteLine(product1.Name);

            // 出力サンプル
            //{
            //    "Name": "Apple",
            //    "Expiry": "2020-01-28T00:00:00",
            //    "Sizes": [
            //    "Small"
            //    ]
            //}
            //Apple
        }
    }

    class Product
    {
        // 商品名
        public string Name { get; set; }
        // 賞味期限
        public DateTime Expiry { get; set; }
        // 大きさの種類
        public string[] Sizes { get; set; }
    }
}

.Net Core,C#,VisualStudio

Posted by hidepon