首页 > 解决方案 > 反序列化对象列表会为空节点 .NET 创建一个新对象

问题描述

我有这个 JSON,它是一个对象列表,就像这样。

"Fields": [
    {
        "fieldID": 1,
        "name": "field"
    }
]

当列表为空时,它是这样发送的

"Fields": [
    {}
]

我将其作为字符串读入,然后尝试使用JsonConvert.DeserializeObject<List<T>>(json);其中 T 是与字段模型匹配的对象来反序列化它。但是,当我这样做时,我会得到一个包含一个项目的新列表(当它应该为 0 时计数 = 1),就像我反序列化这个 JSON 一样。

"Fields": [
    {
        "fieldID": 0,
        "name": null
    }
]

我怎样才能避免或解决这个问题?

标签: c#json.net

解决方案


第一个以下 json 不代表空列表:

"Fields": [
    {}
]

json 中的空列表应如下所示:

"Fields": []

所以你应该尝试修复json。但是,如果事实证明这是不可能的,您可以执行以下操作:

        using (JsonDocument document = JsonDocument.Parse(jsonString))
        {
            JsonElement root = document.RootElement;
            var l = root.EnumerateArray().First().ToString();
            if(l=="{}")
            {
              //do something
            }
        }

发生的事情是您只需解析 json 并枚举元素列表并检测“{}”是否存在。

或者,您可以采用更复杂的方式,即编写一个自定义转换器,以您想要的方式处理这种情况。您可以在此处查看文档


推荐阅读