2011-11-14 9 views
1

経由の逆シリアル化でBindingFailure JSON.Net 4.0 r3自体でシリアル化されたJSON文字列を逆シリアル化しようとしています。シリアル化とデシリアライズの設定は同じです。次の例外が発生します。JSON.Net 4.0 r3

がタイプ 'System.Collections.Generic.List`1 [[System.Drawing.PointF、 System.Drawing]]' アセンブリの「"mscorlib、バージョン= 4.0を見つけることができませんでした.0.0、 カルチャニュートラル、PublicKeyToken = = b77a5c561934e089" 」

をオンにした後、 "BindingFailureがスローされたときに停止"、私はこの問題は、以下の部分にある参照(JSON.Netのソースコード、DefaultSerializationBinder.cs) :

if (assemblyName != null) 
    { 
    Assembly assembly; 

#if !SILVERLIGHT && !PocketPC 
    // look, I don't like using obsolete methods as much as you do but this is the only way 
    // Assembly.Load won't check the GAC for a partial name 
#pragma warning disable 618,612 
    assembly = Assembly.LoadWithPartialName(assemblyName); 
#pragma warning restore 618,612 
#else 
    assembly = Assembly.Load(assemblyName); 
#endif 

    if (assembly == null) 
     throw new JsonSerializationException("Could not load assembly '{0}'.".FormatWith(CultureInfo.InvariantCulture, assemblyName)); 

    Type type = assembly.GetType(typeName); // BindingFailure here 
    if (type == null) 
     throw new JsonSerializationException("Could not find type '{0}' in assembly '{1}'.".FormatWith(CultureInfo.InvariantCulture, typeName, assembly.FullName)); 
    } 
BindingFailureの点で示さ

エラーが

表示名「System.Drawing」とのアセンブリであるID 1と の原因をアプリケーションドメインのコンテキストを結合 「LoadFrom」に読み込みに失敗しました失敗しました:System.IO.FileNotFoundException:ファイル またはアセンブリ 'System.Drawing'またはその依存関係の1つを読み込めませんでした。システム は、指定されたファイルを見つけることができません。

オペレーティングシステムは、Windows 7,64ビットです。私はVisual Studio 2010を使用しており、このアプリケーションをFramework v4に向けています。ターゲットはSilverlightまたはPocketPCではありません。

この場合、「System.Drawing」を読み込めないのはなぜですか?これがJSON.Netの問題であるのか、Framework 4.0のインストールに問題があるのか​​はどこから調べるべきですか?

ありがとうございます。

答えて

0

JSON.Netに関連する問題が判明しました。私は、これが原因で(リストのような一般的なコレクションをデシリアライズ関与)の記事での提案であった

jsonSerializerSettings = new JsonSerializerSettings 
{ 
    TypeNameHandling = TypeNameHandling.All 
}; 

を設定し、以下を使用するために使用されます。完全な型情報は、 "抽象基本クラスをインスタンス化できません"というエラーメッセージに関するJSon.Netエラーの助けとなることが示唆されました。

私は

jsonSerializerSettings = new JsonSerializerSettings 
{ 
    TypeNameHandling = TypeNameHandling.Auto 
}; 

にそれを変更すると、それが正常に動作します。興味深いことに、いくつかの型情報は出力されません、私はBindingFailureを取得しないで、デシリアライゼーションは正常に動作します。私はなぜそれが最初の場所で "オート"で動作しなかったのか分かりません。