C# Json形式の文字列をクラスオブジェクトに変換する
System.Text.Json
で、Json
型の文字列をクラスオブジェクトに変換する方法を紹介します。
Json
を扱うライブラリといえばJson.NET
(Newtonsoft.Json
)を使用することが多いですが、今回は.NET Core 3.0
以降の標準機能であるSystem.Text.Json
を使用します。
例えば以下のクラスがあるとします。
Chat.cs
public class Chat
{
public Chat(int chatId, string chatName)
{
ChatId = chatId;
ChatName = chatName;
}
public int ChatId { get; set; }
public string ChatName { get; set; }
}
以下のようにインスタンスを作成し、この値をJson
に変換します。
Chat.cs
var chat = new Chat(1, "チャット名");
C# System.Text.JsonでclassをJson形式の文字列に変換するで紹介した方法で、Json
型の文字列に変換します。
Console.WriteLine(JsonSerializer.Serialize(chat));
// 出力結果
// {"ChatId":1,"ChatName":"\u30C1\u30E3\u30C3\u30C8\u540D"}
このJson
形式の文字列{"ChatId":1,"ChatName":"\u30C1\u30E3\u30C3\u30C8\u540D"}
を再びChat
クラスに戻します。
JsonSerializer.Deserialize<クラス>(Json形式の文字列)
の形式で、変換します。
using System.Text.Json;
var chat = new Chat(1, "チャット名");
// Json形式の文字列に変換
string test = JsonSerializer.Serialize(chat);
Console.WriteLine(test);
// 出力結果
// {"ChatId":1,"ChatName":"\u30C1\u30E3\u30C3\u30C8\u540D"}
// Chatクラスに変換
Chat test2 = JsonSerializer.Deserialize<Chat>(test);
Console.WriteLine(test2);
// 出力結果
// Chat
クラスオブジェクトはConsole
で中身を出力できないため、値が確認できません。
class
の代わりにrecord
を使用すると、値まで出力されます。
Chat.cs
public class Chat
public record Chat
{
public Chat(int chatId, string chatName)
{
ChatId = chatId;
ChatName = chatName;
}
public int ChatId { get; set; }
public string ChatName { get; set; }
}
// Chatクラスに変換
Chat test2 = JsonSerializer.Deserialize<Chat>(test);
Console.WriteLine(test2);
// 出力結果
// Chat { ChatId = 1, ChatName = チャット名 }