2011-07-29 65 views
5

我使用Newtonsoft的Json.NET反序列化JSON字符串:如何檢查動態是否爲空。

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

我如何檢查output是空的?一個例子測試用例:

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

「{}」的輸出應爲空/空嗎?我期望它創建一個沒有屬性的通用對象。我期望反序列化「[]」會創建一個沒有元素的數組對象。 – nnnnnn

回答

12

你DeserializeObject返回的對象將是一個JObject,具有Count屬性。這個屬性告訴你對象有多少個屬性。

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

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

這不會告訴你,如果動態對象是空的,但它會告訴你,如果反序列化JSON對象是空的。

+0

[根據文檔](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) 
{ 
} 

爲我工作。