如何检查动态变量是否为空。

16

我正在使用Newtonsoft的Json.NET来反序列化一个JSON字符串:

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

如何检查 output 是否为空?一个示例测试案例:

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

2
“{ }”的输出应该是空的/ null吗?我期望它会创建一个没有属性的通用对象。我期望反序列化“[ ]”会创建一个没有元素的数组对象。 - nnnnnn
3个回答

23
从DeserializeObject得到的对象是JObject,它有一个Count属性,该属性告诉您对象上有多少个属性。

您从DeserializeObject获取的对象将是JObject,它具有Count属性。此属性告诉您对象上有多少个属性。

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

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

这并不能告诉你一个动态对象是否为空,但它可以告诉你反序列化后的JSON对象是否为空。


根据文档(http://james.newtonking.com/projects/json/help/html/M_Newtonsoft_Json_JsonConvert_DeserializeObject__1.htm),`DeserializeObject` 返回的是 T,而不是 JObject - Kirk Woll
4
dynamic 不是一个实际的类型,因此 Json.NET 就会使用 JObject。 - James Newton-King
今天我也需要做类似的事情,这个帮了我很大忙,但是我需要调整它为:((JToken)output).Count() - Hilton Giesenow

3
您也可以使用以下代码进行检查:
var output = JsonConvert.DeserializeObject<dynamic>("{ }");
if (output as JObject == null)
{
}

这对我有用。


-1
你可以进行字符串转换并检查它是否等于“{ }”。
var output = JsonConvert.DeserializeObject<dynamic>("{ }");

if (output.ToString() =="{ }")
{
    // The object is empty
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接