json.net有关键方法吗?

Sev*_*ays 135 c# json json.net

如果我的回复有关键"错误",我需要处理错误并显示警告框.

json.net中是否存在"haskey"方法?喜欢:

var x= JObject.Parse(string_my);
if(x.HasKey["error_msg"])
    MessageBox.Show("Error!")
Run Code Online (Sandbox Code Playgroud)

svi*_*ick 232

只是用x["error_msg"].如果该属性不存在,则返回null.

  • @AndreasFurster然后它将返回一个`JValue`,其`Value`为`null`,而不仅仅是`null`. (67认同)
  • 如果属性的值为"null"怎么办? (37认同)
  • @ WilliamT.Mallard在C#6中,您可以通过使用空条件索引运算符来简化它:`myJObject ["level1property"]?["level2property"]`. (9认同)
  • 如果属性可能为 `null`,您可以使用 `x["error_msg"] is Object` 来检查该属性是否在 JSON 对象中定义 (2认同)
  • @ user3199329这只是一种令人困惑的方式来编写`x ["error_msg"]!= null`,所以不,它不会检查属性是否存在且值是否为"null". (2认同)

Jon*_*eet 98

JObject实现IDictionary<string, JToken>,所以你可以使用:

IDictionary<string, JToken> dictionary = x;
if (dictionary.ContainsKey("error_msg"))
Run Code Online (Sandbox Code Playgroud)

......或者你可以使用TryGetValue.它使用显式接口实现实现这两种方法,因此您无需先转换即可使用它们IDictionary<string, JToken>.

  • @wsevenday:不,它不会*创建*字典.`JObject`*已实现*`IDictionary <string,JToken>`.这只是*参考作业.不,接受的答案是不检查密钥是否在*数组*中......它仍然使用普通的索引器.仅仅因为它*看起来像数组访问并不意味着它*是*数组访问.(数组访问不能首先使用字符串.) (24认同)
  • @wsevendays,在这里速度对你来说很重要还是只是微观优化(并且基于猜测)?你应该使用你觉得更具可读性的东西. (2认同)

Raz*_*zor 9

JObject.ContainsKey(string propertyName) 在11.0.1版本中已作为公共方法

文档-https: //www.newtonsoft.com/json/help/html/M_Newtonsoft_Json_Linq_JObject_ContainsKey.htm