普通のクラスを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
クラスにId
とName
だけを持たせておいて、これを操作していきます。
次の例では、単に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
以上です。
コメントを残す