C#处理下面特定JSON中的空值
本文关键字:JSON 空值 处理 | 更新日期: 2023-09-27 18:27:28
我正在尝试获取下面JSON中的拇指图像URL。如果"image"不为空,如果"thumb"不为零,我下面的内容会很好地工作。但如果其中一个为null,则会得到NullException。
以下是简化的JSON示例:
{
"total_items": "24",
"page_number": "1",
"page_size": "10",
"page_count": "3",
"cars": {
"car": [
{
"image": {
"thumb": {
"width": "32",
"url": "<image_url>/honda1.jpg",
"height": "32"
}
}
},
{
"image": null,
}
]
}
}
以下是我如何使用Newtonsoft.JSon:对其进行反序列化
dynamic data = (JObject)JsonConvert.DeserializeObject(json);
foreach (dynamic d in data.cars.car)
{
Car c = new Car();
c.ThumbUrl = d.image.thumb.url; //image AND thumb could be null
}
我读过几篇关于如何处理这一问题的文章,并尝试在Url
属性之上的Car类中添加[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
,但这并没有解决任何问题。谢谢,
在C#中,我们现在有空条件运算符,如?.
,它们是为这类事情设计的:
c.ThumbUrl = d.image?.thumb?.url;
这是一种比确定路径中的任何对象是否为null简单得多的方法,例如在最新版本的C#中null条件可用之前使用的这种方法:
c.ThumbUrl = d.image == null ? (string)null : d.image.thumb == null ? (string)null : d.image.thumb.url;
就我个人而言,我还没有尝试过动力学。我认为它应该工作,因为它最终扩展到基本相同的代码。
使用解决
e.ThumbUrl = (string)d.SelectToken("image.thumb.url");