メソッドを置いてとりあえず黙らせておきましょう。継承エラーまず2つのプロパティ、CanRead、CanWriteのオーバーライドを実装します。CanReadはtrue、CanWriteはfalseを返すようにすれば十分です。コンバータではJSONの読み取りのみ対応していることを示すためです。この場合、JSONの書き込みの際は標準の処理が実行されます。次に先程NotImplementedExceptionをぶん投げるだけにしておいたReadJsonとWriteJson。このうちWriteJsonは、CanWriteでfalseを示すようにしたので、実行されることがなく、NotImplementedExceptionのままで問題ありません。ReadJsonメソッドは、ざっくり次のような感じ。サポートしておりません。");}}先にTargetTypeの値だけ取得して、そこから判断して具体的なシリアライズ先の型を決定しているだけです。あとは、このJsonConverterをITestClass型のデシリアライズ時に利用させるための属性を付与します。StackOverflowException先程定義した「TestClassConverter」のWriteJsonメソッドの中にブレークポイントを設置したら、何回も繰り返し呼ばれていることがわかりました。言いますのも先程のプログラムのうち「tokens.ToObject<Alpha>();」がどうも悪さをしているようで。詳しい原因は調査していないのですが、ITestClassに置いたJsonConverterの属性がAlphaクラスにも適用されるとJsonSerializer側からみなされているようで、Alphaのデシリアライズ時もITestClassのデシリアライズ時同様、TestClassConverterが呼ばれちゃってるみたいなんですよね。この問題を回避する方法はいくつかあるのですが、今回は一番わかり易い方法で行こうと思います。回避法はズバリ「何もしないConverterを定義し、「Alpha」クラスと「Beta」クラスへ適用させてしまえというもの。受け継がれし属性を幻想殺し(読み「イマジンブレイカー」)してしまおうという強引技です。クラスへの適用コードはサンプルプログラムを見てください。これでやっと本当に完成です。珍しく長編となってしまいました。すると、もしかしなくても、もっと頭の良い方法を使っている方もいらっしゃるかもしれません。型名をデシリアライズ時のヒントにする際の注意点なんですが、Activatorなんかを利用してJSONデータの中に書いてあった型名をインスタンス化するような方法は避けて下さい。JSONデータがネットを彷徨っている間に悪意のある人間に書き換えられてしまった、なんてことがあるととんでもないセキュリティホールになりかねないので。型のヒントの部分に関しては、飽くまでも簡単に説明するために型名を利用しましたが、そこは皆さんのお作りになっているソフトウェアに応じて書き換えてください。著作権を主張することはございません。これ使える、と思ったらご自由にお使いになって下さい。Licenseで頒布しております。詳しくは、Newtonsoft様のウェブサイトをご覧ください。