簡體   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