繁体   English   中英

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

[英]Avoid object null reference exception when accessing sub-elements that may or may not exist (JSON)

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

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数据有时没有价格元素,因此在t之后没有消息
我如何将这些参数转换为null?

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM