zukucode
主にWEB関連の情報を技術メモとして発信しています。

C# Json形式の文字列をクラスオブジェクトに変換する

System.Text.Jsonで、Json型の文字列をクラスオブジェクトに変換する方法を紹介します。

Jsonを扱うライブラリといえばJson.NETNewtonsoft.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 = チャット名 }

関連記事