2011-07-29 26 views
5

私は、JSON文字列をデシリアライズするNewtonsoftのJson.NETを使用しています:ダイナミックが空であるかどうかを確認する方法。

var output = JsonConvert.DeserializeObject<dynamic>("{ 'foo': 'bar' }"); 

にはどうすればoutputが空であることを確認することができますか?例えば、テスト・ケース:

var output = JsonConvert.DeserializeObject<dynamic>("{ }"); 
Assert.IsNull(output); // fails 
+2

"{}"の出力を空にする必要がありますか?私はプロパティを持たない汎用オブジェクトを作成することを期待しています。 deserialising "[]"は要素のない配列オブジェクトを作成すると思います。 – nnnnnn

答えて

12

あなたが戻っDeserializeObjectから取得したオブジェクトは、Count性質を持っているJOBJECT、になるだろう。このプロパティは、オブジェクトのプロパティの数を示します。

var output = JsonConvert.DeserializeObject<dynamic>("{ }"); 

if (((JObject)output).Count == 0) 
{ 
    // The object is empty 
} 

動的オブジェクトが空の場合、これはあなたを教えてくれませんが、非直列化されたJSONオブジェクトが空の場合、それはあなたを教えてくれます。

+0

[Docsによる](http://james.newtonking.com/projects/json/help/html/M_Newtonsoft_Json_JsonConvert_DeserializeObject__1.htm)、 'DeserializeObject'は' T'を返します。これは 'JObject'ではありません。 –

+4

ダイナミックは実際のタイプではありませんので、Json.NETはJObjectを使用することに戻ります。 –

2

あなたはまた、次のコードで確認することができます。私のために働いた

var output = JsonConvert.DeserializeObject<dynamic>("{ }"); 
if (output as JObject == null) 
{ 
} 

関連する問題