でオブジェクトへのデシリアライズ。名前は、今のところ、SimpleProtocol
、ParallelProtocol
です。私はこれらのオブジェクトを永続化したいので、私はJSON.NETを使い、すべて正常に動作します。しかし、私はJSONデータをロードし、取得したいような状況で今の私JSON.NETは私が解決することができません、次の問題を抱えているTypeパラメータ
SimpleProtocol p = JsonConvert.DeserializeObject<SimpleProtocol>(myJsonData);
:私はそれらをデシリアライズしようとしていたとき、私は、彼らは、例えば、ことになっているタイプを知っているとき、それは完璧に動作を除きますIProtocol
が返ってきますが、これはJSONが許可していないことを意味します。そうで試して、ちょうど私が必要なもののように見える
public static Object DeserializeObject(
string value,
Type type
)
:だから
IProtocol p1 = JsonConvert.DeserializeObject<IProtocol>(myJsonData); // does not work
IProtocol p2 = (IProtocol)JsonConvert.DeserializeObject(myJsonData); // also, does not work
、私はこのメソッドのシグネチャを見つけアップAPI探して:例えば、このような何かがない仕事はありませんまた、文字列タイプを永続化し、それを取得する:
// test
Type protocolType = Type.GetType("MyApp.Protocols.SimpleProtocol");
IProtocol p1 = JsonConvert.DeserializeObject(myJsonData, protocolType);
私はをキャストすることは不可能であるエラーが発生します210〜IProtocol
。これは奇妙で、私はこれを解決する方法を知らない。
一般的な方法でTypeオブジェクトを渡すことは不可能なので、ここでは基本的に固執しています。これを解決する方法はありますか?好ましくはReflectionを使わないでください。これは完全に通常のユースケースであると私は思います。
私は何ができますか、私には少し汚れているようですが、IProtocolインスタンスを保持してシリアライズ/デシリアライズする簡単なラッパークラスを作成することですか?
あなたは、単一の要素またはのコレクションをデシリアライズしていますそれら? – R0MANARMY
これらの質問を見て、それらが役立つかどうかを見てみるといいでしょう:[JSON.NETでの逆シリアル化のためのキャスティングインターフェイス](http://stackoverflow.com/q/5780888/164966)、[カスタムJsonConverterの実装方法JSON.NETでベースクラスオブジェクトのリストを非直列化する](http://stackoverflow.com/q/8030538/164966)、[Json.NETコンバータを使用したプロパティの逆シリアル化](http://stackoverflow.com/q/ 2254872/164966)。 – R0MANARMY
あなたのヒントをありがとう、私はそれらを読んだが、私の解決策は異なっていることが判明した(下記参照)。 – avanwieringen