C# Json形式の文字列をクラスオブジェクトに変換する
System.Text.Jsonで、Json型の文字列をクラスオブジェクトに変換する方法を紹介します。
Jsonを扱うライブラリといえばJson.NET(Newtonsoft.Json)を使用することが多いですが、今回は.NET Core 3.0以降の標準機能であるSystem.Text.Jsonを使用します。
例えば以下のクラスがあるとします。
Chat.cspublic class Chat
{
public Chat(int chatId, string chatName)
{
ChatId = chatId;
ChatName = chatName;
}
public int ChatId { get; set; }
public string ChatName { get; set; }
}以下のようにインスタンスを作成し、この値をJsonに変換します。
Chat.csvar 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.cspublic 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 = チャット名 }