检查属性是否存在以阻止错误;无法访问Newtonsoft.Json.Linq.JProperty上的子值

时间:2017-06-10 04:24:30

标签: json vb.net linq json.net

JSON:

{
  "status": "OK",
  "maximum_reached": 0,
  "top_domain": {
    "dont_show": 1
  },
  "free_domains": [
    {
      "status": "AVAILABLE",
      "domain": "go",
      "tld": ".tk",
      "currency": "USD",
      "type": "SPECIAL",
      "price_int": "1000",
      "price_cent": "00",
      "show_top_domain": 0,
      "is_in_cart": 0
    },
  ]
}

VB.NET代码:

Dim jsonObj As JObject = JObject.Parse(hr.Html)

If IsNothing(jsonObj.[Property]("free_domains")(0)("status")) Then

End If

错误:

  

无法访问Newtonsoft.Json.Linq.JProperty

上的子值

如何检查属性是否存在以确保在错误不可用时触发错误?

1 个答案:

答案 0 :(得分:0)

free_domains中存在名为jsonObj的属性,如果您检查jsonObj.[Property]("free_domains")的返回值,则它确实包含适当的对象。

关键是jsonObj.[Property]("free_domains")返回类型为JProperty的对象,它是属性描述符。此描述符不直接表示属性值。要访问此值,请使用JProperty.Value

jsonObj.[Property]("free_domains").Value(0)("status")

但是,有一种更简单的方法来访问该值。使用jsonObj

的字符串索引器
jsonObj("free_domains")(0)("status")

要检查属性是否存在,请检查字符串索引器返回的值是否不是Nothing。当访问层次结构中的一系列属性时,空条件运算符可能很方便:

If IsNothing(jsonObj("free_domains")?(0)?("status")) Then

End If