【问题标题】:C# JSON; Deserialize array that sometimes has an empty value (not null)C# JSON;反序列化有时具有空值(非空)的数组
【发布时间】:2017-10-12 18:45:50
【问题描述】:

我正在尝试反序列化 JSON 响应,我想要一个函数来检测数组是否为空,如果它不为空,我希望它返回值。

JSON 数组为空时如下所示:

{"metrics":[]}

当它不为空时,它可能如下所示:

{"metrics":["flow"]}

{"metrics":["energy"]}

{"metrics":["flow","energy"]}

如何检测到这一点?

它不适用于 NullValueHandling,因为如果数组为空,则它不为 null,它根本没有任何值。

我只是得到一个关于 index is not found 的错误。

我将数组作为我的类中的列表返回。

【问题讨论】:

  • 您说您的代码有错误。能发下相关代码吗?
  • 每次都以同样的方式反序列化,然后检查List之后是否为空
  • 我认为 NewtonSoft 的 JSON 反序列化器可以很好地处理这个问题。它会给你一个长度为 0 的数组。

标签: c# arrays json null json.net


【解决方案1】:

假设您使用 Newtonsoft.Json 反序列化 json:

class Data
{
    public List<string> Metrics { get; set; }
}

var json = "{\"metrics\":[]}";
var obj = JsonConvert.DeserializeObject<Data>(json);

obj.Metrics 将是一个 empty 集合,而不是 null。

另外,即使是这样,您也可以像这样访问它

var metrics = obj.Metrics ?? new List<string>();

【讨论】:

    猜你喜欢
    • 2022-01-17
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    • 2022-01-11
    相关资源
    最近更新 更多