【问题标题】:How to check if dynamic is empty.如何检查动态是否为空。
【发布时间】:2011-10-15 14:47:00
【问题描述】:

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

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

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

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

【问题讨论】:

  • “{}”的输出是否应该为空/null?我希望它创建一个没有属性的通用对象。我希望反序列化“[]”会创建一个没有元素的数组对象。

标签: c# .net json dynamic json.net


【解决方案1】:

从 DeserializeObject 返回的对象将是一个 JObject,它有一个 Count 属性。此属性告诉您对象上有多少属性。

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

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

这不会告诉你动态对象是否为空,但它会告诉你反序列化的 JSON 对象是否为空。

【讨论】:

  • According to the docs, DeserializeObject 返回T,它不会是JObject
  • dynamic 不是实际类型,因此 Json.NET 回退到使用 JObject。
  • 我今天必须做类似的事情,这有帮助,但我需要将其调整为:((JToken)output).Count()
【解决方案2】:

您也可以使用以下代码进行检查:

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

这对我有用。

【讨论】:

    【解决方案3】:

    您可以只进行字符串转换并检查它是否等于“{}”。

    var output = JsonConvert.DeserializeObject<dynamic>("{ }");
    
    if (output.ToString() =="{ }")
    {
        // The object is empty
    }
    

    【讨论】:

      猜你喜欢
      • 2017-05-12
      • 1970-01-01
      • 2022-12-31
      • 2016-06-15
      • 2017-11-15
      • 2020-05-29
      • 2018-04-02
      • 2016-04-05
      • 2018-01-08
      相关资源
      最近更新 更多