.NET Core(C#): JsonSerializerの単純な使い方

JsonSerializerの基本的な使い方とサンプルを説明します。

概要

使い方

クラス・プロパティをJSON文字列に変換する場合はJsonSerializer.Serialize()、逆にJSON文字列の内容をクラス・プロパティに変換する場合はJsonSerializer.Deserialize()を使用します。
変換対象となるクラス・プロパティの型によって、変換仕様が異なります。例えば、string型をシリアライズする場合は「”hello”」、intやlong型では「100, 1000」、bool型では「True/False」、がJSON文字列として出力されます。

  • Serialize(), Deserialize()メソッドには他の呼び出し方(オーバーロード)があります。
    詳細はJsonSerializerのリファレンスをご覧ください。
  • シリアライズ・デシリアライズ時の引数として、JsonSerializerOptionを指定することで動作をカスタマイズできます。
    (JSONのフィールド名をキャメルケースにしたい、人が読みやすいようにインデントを追加する等)
  • メモリ上でのクラス・プロパティとJSON文字列(string型)の変換は良いのですが、ファイル入出力等のストリームを使った操作では、日本語が文字化けしたりユニコードエスケープされます。この対応は別途説明します。

型の変換例

  • 各種の型をシリアライズした場合の出力例を次に記載します。(デシリアライズの場合は逆になります。)
    これらは、既定の変換結果であり、別途説明するコンバータを使用することでカスタマイズできます。
  • プロパティに指定できる型は、マイクロソフトのリファレンスのシリアル化の動作逆シリアル化の動作をご覧ください。
  • なお、サポートされない型を使用するとNotSupportedException例外がスローされます。
サンプル値(C#表記)出力結果(シリアライズ結果)備考
byte0x2032
byte[]{ 0x00, 0x01, 0x02, 0x03 }"AAECAw=="BASE64で符号化されて出力される
char(char)0x21“!”
char[]{ 'a', 'b', 'c' }["a", "b", "c"]
intint.MinValue-2147483648
longlong.MaxValue9223372036854775807
float00
3.14F3.14
float.MaxValue3.4028235E+38
double00
1000000.000D1000000
double.MinValue-1.7976931348623157E+308
string"123abc""123ABC"
"123\tabc\r\nABC""123\tabc\r\nABC"
@"!""#$%
&'()*
+,-./
:;<=>
?@[\]^_`{|
}~"
"!\u0022#$%
\u0026\u0027()*
\u002B,-./
:;\u003C=\u003E
?@[\\]^_\u0060{|
}~"
一部の記号はユニコードエスケープ、"\"のみ"\\"にエスケープ
booltruetrue
falsefalse
列挙体Status.End2列挙体の値が出力される
リスト
(IEnumerable)
new List<string>(){
"123",
"abc"
}
[
"123",
"abc"
]
Dictionarynew Dictionary<string, int>(){
["aaa"] = 1111,
["bbb"] = 2222
}
{
"aaa": 1111,
"bbb": 2222
}
Dictinary<T, V>のTはフィールドとして出力されるためstring型必須、Vは任意の型を指定可