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

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 = チャット名 }

関連記事

  • vscode C#のusingを自動で設定するショートカット

    vscodeでC#のusing文を自動で設定するショートカットを紹介します。「The type or namespace name XXX could not be found (are you mi...


  • C# yyyyMMdd形式の日付文字列をyyyy/MM/dd形式に変換する

    yyyyMMdd形式の日付文字列をスラッシュ区切りのyyyy/MM/dd形式に変換する方法を紹介します。以下のような共通ファンクションを作成します。文字列の長さが8桁でない場合は変換は行わない仕様とし...


  • C# YYYYMMDD書式の文字列が日付かどうか判定する

    C#で、YYYYMMDD書式の文字列が日付として妥当かどうかを判定します。以下のように、Date.TryParseExactを使用して、日付型の文字列に変換可能かどうかで判定しています。時刻も同じ方法...


  • C# UTC時刻の日付をJST時刻に変換する

    C#のUTC時刻の日付DateTimeを、JST時刻の日付に変換する方法を紹介します。単純に時刻を+9時間するのと同じですが、ここではタイムゾーンの仕様に基づいて変換します。以下のように変換します。T...


  • C# TryParseで文字列を安全に数値へ変換する

    テキストボックスやCSVから受け取った値は文字列です。数値として使いたい場合、int.Parseは変換できない入力で例外を投げます。入力が誤っていることを通常の分岐として扱うなら、TryParseが向...


  • C# TimeProviderで有効期限のテストを安定させる

    有効期限を判定する処理でDateTimeOffset.UtcNowを直接使用すると、テスト中の時刻を固定できません。実際に時間が過ぎるのを待つテストは遅く、境界付近で結果が不安定になります。今回は.N...


  • C# 型付きIDで異なるIDの渡し間違いを防ぐ

    注文IDと顧客IDがどちらもGuidの場合、引数の順序を間違えてもコンパイルできます。メソッドの引数も両方Guidなら、値を逆に渡しても型エラーになりません。今回はIDごとに専用の型を作り、渡し間違い...


  • C# 文字列を数値に安全に変換する

    C#で、string型の文字列を、intやdecimalなどの数値型に、例外が発生しないように安全に変換する方法を紹介します。以下のように、TryParseを使用します。int(またはdecimal)...


  • C# 文字列を半角1バイト、全角2バイトで算出したバイト数を取得する

    C#で、文字列を半角1バイト、全角2バイトで算出したバイト数を取得する方法を紹介します。Shift_JISの文字コードだと1文字のバイト数は半角1バイト,全角2バイトと決まっているため、これを利用しま...


  • C# 右から指定した文字数を取得するRight関数を実装する

    C#で、右から指定した文字数を取得するRight関数を実装します。以下のようになります。左から指定した文字数を取得するLeft関数の実装方法についてはC# 左から指定した文字数を取得するLeft関数を...