C#

【C#】JSONファイルのシリアライズ・デシリアライズ方法

今回はJSONファイルのシリアライズ・デシリアライズ方法について解説します。

C#の.NETのライブラリを使うとカンタンにシリアライズ処理が行えるので覚えると結構使えます。

シリアライズでファイル出力をする

シリアライズでJOSNファイルの出力をする場合、.NETのSystem.Runtime.Serializationのライブラリを使うことでカンタンにできます。

今回は以下のPersonクラスをファイルにシリアライズ出力してみます。

以下のように書きます。

上記の内容に加えて以下を忘れずにやってくださいね

  • プロジェクトの参照にSystem.Runtime.Serializationを追加
  • ファイルにusing System.Runtime.Serialization.Json; を追加

シリアライズ出力したJSONファイルの中身です。↓

とてもカンタンにできますね。

デシリアライズでファイル読み込みをする

今度はデシリアライズ(シリアライズしたものを逆に読み込む)です。

こちらもシリアライズと同様にライブラリでカンタンに処理することができます。

serializer.ReadObjectの戻り値はobject型なので、戻り値をPerson型へキャストしてあげることで読み込めます。

こちらをやる場合も以下は忘れずにやってくださいね

  • プロジェクトの参照にSystem.Runtime.Serializationを追加
  • ファイルにusing System.Runtime.Serialization.Json; を追加

キー名を変更してシリアライズ出力する

上記で書いた方法でシリアライズ・デシリアライズは可能ですが、出力されるファイルのキーがプロパティ名がデフォルトで使われてしまします。

ソースコードのプロパティ名は変更したくないけど、JSON出力のキー名は変更したい!という場合、以下のように設定してあげればキー名を変更可能です。

classに対してDataContractの属性追加、キー名を変更したいプロパティに対してDataMemberでキー名の指定をすることで変更できます。

この場合、出力したいプロパティ(名前変更しないプロパティも含めて)には全てDataMember属性を付けるようにしてください。後で書いていますが、付与しない場合にシリアライズ出力対象から除外されます。

以下を忘れずにやってくださいね

  • ファイルにusing System.Runtime.Serialization; を追加

これでシリアライズ出力したJSONファイルの中身です。↓

とてもカンタンです。

不要な要素を除外しシリアライズ出力する

クラスが多くのプロパティを持つ場合、一部の要素はシリアライズ対象にしたくないということがあります。

そのような場合にも属性の機能を使うことで対応できます。書き方は以下です。

IgnoreDataMemberの属性を追加されたAgeプロパティはシリアライズ対象から外され、以下のように出力されます。

DataContract属性が付与されているクラスの場合、DataMemberの属性を要素に設定しなければシリアライズ対象から除外できます。

これでシリアライズ出力をすると以下のようにAgeのプロパティが除外されて出力されます。

子クラスを含んだクラスをシリアライズ出力する

シリアライズ対象のクラスが子クラスを持っている場合がありますが、この場合も別に意識する必要はありません。そのままシリアライズ出力できます。

このようなHeadという子クラスを持つPersonクラスを作りやってみます。

以下のように設定して、出力してみます。

これを実行すると以下のように出力されます。

ちゃんとHeadクラスが入れ子になって出力されていますね。