【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; }
}
}
ディスカッション
コメント一覧
まだ、コメントがありません