2012-12-03 9 views
37

私は、Newtonsoft JSONライブラリを使用して、受信した生のJSONで動的非直列化を実行しています。されているこのコードNewtonsoft JSON - 動的オブジェクト

var dyn = JsonConvert.DeserializeObject<dynamic>(rawJson); 
DateTime dueDate = dyn.task.dueDate.Value; 

:私はこれをやっているコードであり、あまりにも複雑

{ 
    "task": { 
    "dueDate": "2012-12-03T00:00:00" 
    } 
} 

何も...

出発点は、次のようなJSON文字列です。数ヶ月間はうまく動作していますが、最近のテストビルドでは、次のエラーが表示されていました:

'Newtonsoft.Json.Linq.JObject' does not contain a definition for 'task'

Stack Trace: at CallSite.Target(Closure , CallSite , Object) at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0)

さて、これは奇妙な取得した場合、すべては私から上記のコードを変更した場合、再び作業を開始している。これは私が「固定」されているが、そう

DateTime dueDate = dyn["task"]["dueDate"].Value; 

DateTime dueDate = dyn.task.dueDate.Value; 

これがなぜそれを修正し、起こりうる原因が何であるかを理解してはいけません。誰もが任意のアイデア

を持っています
+0

使用しているJson.NETのバージョンを変更しましたか? –

+0

いいえ、それは私の最初の考えでした。コードとライブラリの両方の変更履歴を見れば、ライブで何が起きているのか変更されていないことがわかります – MrEyes

+4

これは "最初のチャンスの例外"ダイナミクス(エラーログインなどで詳細レベルを上げたことがありますか?) – tpeczek

答えて

41

あなたはこれを試すことができます。

dynamic task = JObject.Parse(rawJson); 

は、ドキュメント:Querying JSON with dynamic

+0

これは素晴らしいです、なぜそれが受け入れられた答えではないかと思います。 – Saturnix

+11

彼は提供されている例ではうまくいかないので、なぜそれが動作しないのか理解してほしいからです。 –

+1

これは私のために、同じエラーを解決しませんでした。 – Ted

1

は、これは間違いなくいくつかの参照の問題は、私は同じ問題を抱えていた、問題は私が持っていたことであったが、さパッケージフォルダをプロジェクトに追加して、VSSでチェックインできるようにしました(申し訳ありません、必須)。ビジュアルスタジオからパッケージフォルダを削除するとすぐに正常に動作しました。

+2

VSS ...ああ!申し訳ありません。 –

1

アプリで同じ問題が発生しましたあなたJson.NETを歌いなさい。特定のマシンでのみ問題が再現され、GACにJson.NETの別のバージョンがインストールされていることが判明しました。 GACからアプリケーションを削除した後、アプリケーションが正しく動作するようになりました。

+0

これは私にとっては同じ問題でした! –

5

私の場合は、最初のチャンスの例外をキャッチしていたので、この例外はスローされていましたが、実際にはコードの実行を妨げていませんでした。

なぜこれがJson.NETによって直列化された一部のコンテンツで発生するのか、すべてのコンテンツではないことが分かりました。例えば、私は動的なオブジェクトを持っています。私は単体テストでjson.netとシリアライズし、シリアライズされたコンテンツを逆シリアル化します。シリアライズされたコンテンツは、実行時に実行時バインダ例外がスローされるコンテンツと同じに見えます。

4

私は同じ問題を抱えていました。

この問題はJson.NET 6.0.4で発生します.Json.Net 6.0.5に変更する必要があります。 プロジェクトのどれもJson.NET 6.0.4を参照する必要がありません。

ツール - > NuGetパッケージマネージャ - >ソリューションのNuGetパッケージを管理... に移動して、Json.NET 6.0.4を使用するプロジェクトがあるかどうか確認してください。

+0

レコードについては、Json.NET 6.0.3と同じ問題です。最新バージョン7.0.1を修正。 –

+2

興味深いは別として、私はNewtonsoft.JSONソースをダウンロードし、 "task"で検索しました。 OPsの正確な生のJSONはテストメソッドに入れられています...なぜこれが起こったのかを知っていますが、Newtonsoftの誰かがこれを読んでいます。一番下の行のように見えるのは、これがライブラリのバグであるということです。 – RLH

+0

私はv 7.0.0.0でこの問題を抱えています... – Ted

1

私はこの問題がしばらく続いていましたが、ダイナミックをサポートしていない.NET 3.5用にコンパイルされたDLLが使用されていました....あなたのDLLが.NET 4用にコンパイルされていることを確認してください。5以上