[C#, .NET8] System.Text.Jsonの使い方

普通のクラスをJSONにシリアライズして、その後、デシリアライズしてみましょう。

使うクラスはこんな感じで適当なものを用意しました。

public record Person
{
    public int Id { get; set; }
    public string Name { get; set; }
}

var p1 = new Person{ Id = 1, Name="Taro" };
var p2 = new Person{ Id = 2, Name="Jiro" };

PersonクラスにIdNameだけを持たせておいて、これを操作していきます。

次の例では、単にJSONにシリアライズして、その後、そのまま文字列をデシリアライズするというものです。

オブジェクト単体で

using System.Text.Json;

var jsonP1 = JsonSerializer.Serialize<Person>(p1);
Console.WriteLine(jsonP1);
var p3 = JsonSerializer.Deserialize<Person>(jsonP1);
Console.WriteLine($"person:{p3.Id}, {p3.Name}");
{"Id":1,"Name":"Taro"}
person:1, Taro

特に何も指定が無ければ、JSONの属性名は、C#と同じものがつきます。

JSONなので、Javascript的に先頭を小文字にしたい場合があると思います。その場合は、System.Text.Json.Serialization を読み込んであげて、各プロパティにJsonPropertyName属性を付けます。引数に文字列を入れれば、任意のプロパティ名を付けられます。

using System.Text.Json.Serialization;
public record Person
{
    [JsonPropertyName("id")]
    public int Id { get; set; }
    [JsonPropertyName("name")]
    public string Name { get; set; }
}

var p4 = new Person{ Id = 4, Name="Shiro" };

var jsonP4 = JsonSerializer.Serialize<Person>(p4);
Console.WriteLine(jsonP4);
var p5 = JsonSerializer.Deserialize<Person>(jsonP4);
Console.WriteLine($"person:{p5.Id}, {p5.Name}");
{"id":4,"name":"Shiro"}
person:4, Shiro

配列で

var jsonPArray = JsonSerializer.Serialize<Person[]>([p1,p2]);
Console.WriteLine(jsonPArray);
var pArray = JsonSerializer.Deserialize<Person[]>(jsonPArray);
foreach(var p in pArray)
{
    Console.WriteLine($"person:{p.Id}, {p.Name}");
}
[{"Id":1,"Name":"Taro"},{"Id":2,"Name":"Jiro"}]
person:1, Taro
person:2, Jiro

配列の場合も同様です。配列を入れたら、配列のJSONが返ってきて、デシリアライズもできます。

オブジェクトで

もちろん入れ子構造になっている場合もきちんとシリアライズして、デシリアライズできます。

下記の例では、オブジェクトの中に配列を持っている場合を示しています。

public record Group
{
    public int GroupId { get; set; }
    public Person[] People { get; set; }
}

var group = new Group{ GroupId=1, People = [p1, p2] };

var jsonG = JsonSerializer.Serialize<Group>(group);
Console.WriteLine(jsonG);
var g = JsonSerializer.Deserialize<Group>(jsonG);
Console.WriteLine($"group:{g.GroupId}");
foreach(var p in g.People)
{
    Console.WriteLine($"person:{p.Id}, {p.Name}");
}
{"GroupId":1,"People":[{"Id":1,"Name":"Taro"},{"Id":2,"Name":"Jiro"}]}
group:1
person:1, Taro
person:2, Jiro

以上です。

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です