System.Text.Jsonを使用するのに必要なもの
.NET Core3.0以降を使っている場合
.NET Core3.0以降ではデフォルトで入っているので特に何も必要はありません。
.NET Core3.0よりも古いフレームワークを使っている場合
NuGetを使用してSystem.Text.Jsonを導入する必要があります。
https://www.nuget.org/packages/System.Text.Json
基本的な使い方
シリアライズ・デシリアライズするクラスを作成します。
Program.cs
class JSONSample
{
public string ID { get; set; }
public string Name { get; set; }
}
シリアライズ(オブジェクトからJSON文字列を作成)
JsonSerializerのSerializeメソッドを使用してシリアライズすることができます。
Program.cs
private void Serialize()
{
var sample = new JSONSample() { ID = "001", Name = "Chikuwa" };
string jsonString = JsonSerializer.Serialize(sample);
}
クラスを用意せずともDictionary型のオブジェクトもシリアライズすることができます。
Program.cs
private void Serialize()
{
Dictionary<string, string> dic = new Dictionary<string, string>();
dic.Add("ID", "001");
dic.Add("Name", "Chikuwa");
string jsonString = JsonSerializer.Serialize(dic);
}
結果
{"ID":"001","Name":"Chikuwa"}
デシリアライズ(JSON文字列からオブジェクトを生成)
JsonSerializerのDeserializeメソッドを使用してデシリアライズします。
Deserializeメソッドのジェネリックパラメータにオブジェクトのクラス名を指定します。
Program.cs
private void Deserialize()
{
//とりあえずstring変数にJSON文字列を・・・
string json = "{\"ID\":\"001\",\"Name\":\"Chikuwa\"}";
var sample = JsonSerializer.Deserialize<JSONSample>(json);
}
シリアライズ処理についての補足
- シリアライズに使用する各クラスのプロパティはstring型,int型,DateTime型等でもシリアライズされます。
Program.cs
class JSONSample
{
public string ID { get; set; }
public string Name { get; set; }
public DateTime Birthday { get; set; }
public int Age { get; set; }
}
Program.cs
private void Serialize()
{
var sample = new JSONSample() { ID="001", Name="Chikuwa", Birthday=DateTime.Now, Age=30 };
string jsonString = JsonSerializer.Serialize(sample);
}
結果
{"ID":"001","Name":"Chikuwa","Birthday":"2021-09-23T16:28:31.4331997+09:00","Age":30}
- シリアライズされるフィールドは、publicなGetプロパティのみのようです。
Program.cs
class JSONSample
{
//publicなget,setプロパティ
public string ID { get; set; }
//publicなget,setプロパティ
public string LastName { get; set; }
//publicなフィールド
public string FirstName;
//privateなフィールド
private string Age = "30";
private string dept;
//publicなsetプロパティ
public string Dept
{
set { this.dept = value; }
}
}
Program.cs
private void Serialize()
{
var sample = new JSONSample() { ID="001", LastName="Chikuwa", FirstName="Gohan", Dept="TestDept" };
string jsonString = JsonSerializer.Serialize(sample);
}
結果
{"ID":"001","LastName":"Chikuwa"}
「ID」と「LastName」のみがJSON文字列に出力されます。
参考にした資料