2011-10-21 6 views
6

私はここからのsimplejsonライブラリーを使用していると逆シリアル化JSON:http://simplejson.codeplex.com/ネットのsimplejson:動的オブジェクト

私はこのような動的オブジェクトにJSON文字列をデシリアライズしたいと思います:

dynamic json = SimpleJson.SimpleJson.DeserializeObject("{\"foo\":\"bar\"}"); 

var test = json.foo; 

逆シリアル化部分は正常に動作しますが、json.fooを呼び出すとエラーメッセージ'SimpleJson.JsonObject' does not contain a definition for 'foo'でRuntimeBinderExceptionがスローされます。

SimpleJsonを使用してJSON文字列を逆シリアル化し、json.foo構文を使用して動的プロパティにアクセスするにはどうすればよいですか?

答えて

9

まあ、SimpleJsonのソースコードを読んでいるだけです。 :-)私が探している動的構文をサポートするには、行のコメントを外す必要があります。なぜこれがデフォルトで有効になっていないのか分かりません。

// NOTE: uncomment the following line to enable dynamic support. 
//#define SIMPLE_JSON_DYNAMIC 
+2

、L.B.私は質問を削除することはできませんので、これはNuGetを介してSimpleJsonをインストールし、私が行ったのと同じ問題にぶつかる他の人にとって有益なアーティファクトとして役立つでしょう。 –

+1

+1は私にとって有益です。 –

2

サンプルを見ると、JsonObjectのプロパティは辞書のようにアクセスされます。したがって、json.fooの代わりにjson["foo"]が必要です。

ここではdynamicを使用すると、実際には悪化します。このメソッドは動的ではないため、fooというメンバーを持たないJsonObjectを返します。 dynamicを使用していない場合は、コンパイル時にそのエラーメッセージが表示される可能性があります。

リンクL.Bをご覧になっている場合は、このダイナミックな機能を自分で実装する方法を示しています。

1

> CSC/T:図書館/ D:ソースコードから

SIMPLE_JSON_DYNAMIC SimpleJson.cs公正コメントをだ