c# - 反序列化对象列表会为空节点 .NET 创建一个新对象
问题描述
我有这个 JSON,它是一个对象列表,就像这样。
"Fields": [
{
"fieldID": 1,
"name": "field"
}
]
当列表为空时,它是这样发送的
"Fields": [
{}
]
我将其作为字符串读入,然后尝试使用JsonConvert.DeserializeObject<List<T>>(json);
其中 T 是与字段模型匹配的对象来反序列化它。但是,当我这样做时,我会得到一个包含一个项目的新列表(当它应该为 0 时计数 = 1),就像我反序列化这个 JSON 一样。
"Fields": [
{
"fieldID": 0,
"name": null
}
]
我怎样才能避免或解决这个问题?
解决方案
第一个以下 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 并枚举元素列表并检测“{}”是否存在。
或者,您可以采用更复杂的方式,即编写一个自定义转换器,以您想要的方式处理这种情况。您可以在此处查看文档
推荐阅读
- javascript - 在 Rails 中找不到类型为“application/javascript”的文件“jquery-ui/datepicker”?
- git - 无法从 linode 服务器克隆托管的 git 存储库
- c++ - 这段与指针相关的代码有什么问题
- python - Python Dice Roller - 我如何计算所有骰子?
- certificate - Puppeteer/chrome headless - 如何导航到出现证书错误的页面?
- ssl - 为 Hyperledger Fabric couchdb 启用 SSL
- python - ipython.display.display 未在 Jupyter Notebook 中显示图像
- php - 我有一个 AMP 表单,但由于某种原因,它在提交时出错
- reactjs - 反应材料如何主题化身体颜色
- javascript - 如何通过nodejs api调用获取数组对象值