a32kitaNewtonsoftさんのJson.NET、大変便利ですよね。Json.NETでinterfaceのデシリアライズを出来るようにしてみようというお話です。Framework向けのオープンソースのJSONパースライブラリとして、NuGet等でMITライセンスで配布されております。インスタンスを生成する機能、この他JSONを.NET上で取り扱うための様々な機能が実装されております。.NET標準ライブラリにもJSON用のシリアライザがあるですって??いえ、知らないクラスですね...本記事で取り扱う内容Json.NETでは、上記で述べた通りJSONへのシリアライズ、JSONからのデシリアライズ機能がございますが、このうちデシリアライズには制約がございます。定義されている型の情報を元にJSONを読み込んでインスタンスを生成します。指定されている場合、シリアライズを行うことが出来てもデシリアライズには失敗してしまいます。(プロパティ)などが含まれていれば発生します。(プロパティ)が存在している可能性があります。interfaceで型指定が行われているものに対してデシリアライズを行う場合、次の方法で問題を解決します。利用させるための属性の付与サンプルプログラムについて本記事で取り上げるプログラムは次のような構成です。クラスあ、ちなみに次のURLで配布中。ご自由にお使い下さい。定義することで、任意のITestClass実装型からシリアライズされたJSONデータからITestClass型へのデシリアライズを実現することを目的とします。6.0の記法をがっつり使っております。6.0が使えない環境下でも対して影響は無いかと思いますが、その辺は適宜ビルドエラーを見ながら書き換えをしていただければなと思います。ちなみに最初の状態は次の通り。・・・と思ったのですが、文字数制限の都合上、載せられませんでした。上記リンクからサンプルコードをご覧ください。先に紹介した図1のような例外が発生してしまいます。通してデシリアライズ処理が実施されるように変更します。その際、JsonConverterがJSONデータを見て、シリアライズ前は何型であったのかを判断できるようにならなくてはなりません。(プロパティ)を定義しなくてはなりません。型の判断情報となる値を代入させる必要があります。(プロパティ)に格納しておきます。(プロパティ)という形でなくても、とにかくJsonConverterが具体的な型を判断する手立てがあれば構いません。JsonConverter「TestClassConverter」の定義JsonConverterを定義していきます。JsonConverterは、Json.NETから提供されるJsonConverterクラスを継承する形で定義します。実装のお話はサンプルコードをご覧頂いたほうが早そうですね。