0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[C#]System.Text.Jsonを使用してJSONを扱う

Posted at

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文字列に出力されます。

参考にした資料

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?