3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Newtonsoft.Jsonのデシリアライズ時の挙動についてわかったこと

Last updated at Posted at 2020-10-26

はじめに

本記事はNewtonsoft.jsonを使用した際に分かったデシリアライズ時の挙動についてわかったことをまとめた記事です。

わかったこと

Newtonsoft.jsonを使用してJson形式にシリアライズしたJsonオブジェクトをデシリアライズしたときに以下の挙動をしています。

①オブジェクトのコンストラクタに引数がある場合
コンストラクタの引数名がJSONオブジェクトの対応するプロパティ名と一致し(大文字と小文字を区別しない)、コンストラクタ内でプロパティの値の設定を行っていると、インスタンス生成時にプロパティが設定されます。以下のような場合です。


	#region 構築

	/// <summary>
	/// コンストラクタ
	/// </summary>
	public MetaData(string key)
	{
		Key = key;
	}

	#endregion

	#region プロパティ

	/// <summary>
	/// キー
	/// </summary>
	[JsonProperty]
	public string Key { get; }

	#endregion

では、デシリアライズ時に復元したい全てのプロパティ値をコンストラクタ引数に追加しなければならないのかというと、そうではありません。

② オブジェクトのコンストラクタに引数が無い場合
コンストラクタで引数を受け取りその引数を使用してプロパティ値の設定をしない場合は、インスタンスの生成後、オブジェクトのパブリックなプロパティまたは[JsonProperty]属性を付けたプロパティのセッターを使用して値を設定しようとします。

さいごに

どうやってデシリアライズされているのか仕組みを知らずに使っていたため、デバッグ中にうまくプロパティ値が復元できるプロパティとできないプロパティがあり混乱することがありましたので、本記事にまとめました。
皆様の参考になれば嬉しいです。
最後までお読みいただきありがとうございます。

参考サイト

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?