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

C# 在访问可能存在或不存在的子元素(JSON)时避免对象空引用异常,c#,json,class,exception,null,C#,Json,Class,Exception,Null,我已将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

我已将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,
        ...
     );

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

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

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

有超过200 300个子元素和更多,我不能为所有的子元素都这样做,我正在寻找一种方法将所有不存在的元素自动转换为null。还有其他想法吗?使用更好的数据结构。或者创建一个递归反射方法来检查每个级别并提取数据。@MoonLight:为什么不呢?这就是你构建模型的方式。您必须以某种方式验证这些值。不管你是手动进行验证,还是让你使用的库为你进行验证,这都是你的决定。难道你不能让这些对象的属性总是返回一个对象吗?@Lasse V.Karlsen我使用一个在线转换器从json创建c#类。但我认为这是解决办法。请把它作为一个答案。当人们看到问题围绕着NullReferenceException错误消息时,有时会有点急切。然而,这个问题是关于类设计的,在我看来,对于这个问题并不是重复的。您是否序列化这些对象以及反序列化它们?如果对象突然返回其所有属性中的对象,序列化这将成为一场噩梦,因为任何地方都不会有丢失的值。
var token = obj.SelectToken("vn.price.message");
if (token != null)
{
    // do stuff with token
}