访问可能存在或不存在的子元素(JSON)时,避免对象null引用异常

本文关键字:对象 异常 引用 null JSON 存在 不存在 元素 访问 | 更新日期: 2023-09-27 18:29:50

我已经将json数据转换为c#类,并希望将fetch数据插入到我的数据库中
这是我的代码:

My_Json My_Json_res = JsonConvert.DeserializeObject<My_Json>(result_str_after_request);
Venue vn = My_Json_res.venue;
Contact vn_contact = My_Json_res.venue.venue_contact;
Location vn_location = My_Json_res.venue.venue_location;
DataLayer.venues.InsertRow(
        vn.venue_id,
        vn.venue_name,
        vn_contact.contact_phone,
        vn_contact.contact_twitter,
        vn_contact.contact_facebook,
        vn_contact.contact_facebookUsername,
        vn_contact.contact_facebookName,
        vn_location.location_address,
        vn_location.location_crossStreet,
        vn_location.location_lat,
        vn_location.location_lng,
        vn_location.location_distance,
        vn_location.location_postalCode,
        ...
     );

正如你所看到的,我有很多子元素,有时在插入方法中,我会出现以下错误:

NullReferenceException未处理
对象引用未设置为对象的实例。

很难检查是否存在这样的东西:

vn.price.message

上层对象(insert方法中的参数)有错误,因为json数据有时没有price元素,所以在thet之后没有消息
如何将这些参数转换为null?

编辑:
以下是我在c#类中的两个相关属性:

VENUE CLASS
[JsonProperty("price")]
public Price venue_price { get; set; }
PRICE CLASS
[JsonProperty("message")]
public string price_message { get; set; }

为此类消息属性设置默认null值的最快方法是什么?

访问可能存在或不存在的子元素(JSON)时,避免对象null引用异常

使用JToken.SelectToken()方法查找值。如果它存在于完整路径中,则会返回令牌,并且您可以检索您的值。否则它将为null。

var token = obj.SelectToken("vn.price.message");
if (token != null)
{
    // do stuff with token
}