C# 在访问可能存在或不存在的子元素(JSON)时避免对象空引用异常
我已将json数据转换为c#类,并希望将获取数据插入我的数据库。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
这是我的密码:
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
}