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#处理下面特定JSON中的空值

在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");