json.net 有关键方法吗?
Posted
技术标签:
【中文标题】json.net 有关键方法吗?【英文标题】:json.net has key method? 【发布时间】:2011-11-05 05:24:45 【问题描述】:如果我的回复有关键“错误”,我需要处理错误并显示警告框。
json.net 中是否存在“haskey”方法? 喜欢:
var x= JObject.Parse(string_my);
if(x.HasKey["error_msg"])
MessageBox.Show("Error!")
【问题讨论】:
请参考我的回答here。 我在这里回答了一个类似的问题:***.com/a/47204235/1037314 这个问题有两种变体:一种变体是 JSON 字典是扁平的(没有子级),另一种是键位于子级层次结构中的某个位置。在撰写本文时,ns.json 仍然没有方便的方法可以轻松访问测试密钥。 【参考方案1】:JObject
实现了IDictionary<string, JToken>
,所以你可以使用:
IDictionary<string, JToken> dictionary = x;
if (dictionary.ContainsKey("error_msg"))
...或者您可以使用TryGetValue
。它使用显式接口实现来实现这两种方法,因此您必须先转换为IDictionary<string, JToken>
才能使用它们。
【讨论】:
我认为这将是慢慢接受的答案,但谢谢。 @wsevendays,这里的速度对你很重要还是只是微优化(并基于猜测)?您应该使用您认为更具可读性的内容。 我的 WP7 手机 1GHz 处理器的速度不是很好,我需要关心速度。 @wsevendays:为什么它会比接受的答案慢(或快)? @wsevenday:不,它不会创建字典。JObject
已经实现 IDictionary<string, JToken>
。这只是一个参考分配。不,接受的答案不是检查密钥是否在 array 中......它仍在使用普通索引器。仅仅因为它看起来 像数组访问并不意味着它是 数组访问。 (数组访问首先不能通过字符串。)【参考方案2】:
只需使用x["error_msg"]
。如果该属性不存在,则返回null
。
【讨论】:
如果属性值为null
怎么办?
@AndreasFurster 然后它将返回一个JValue
,其Value
是null
,而不仅仅是null
。
如果属性可以是null
,你可以使用x["error_msg"] is Object
来检查属性是否在JSON对象中定义
@user3199329 这只是写x["error_msg"] != null
的一种令人困惑的方式,所以不,它不检查属性是否存在并且具有null
的值。
@WilliamT.Mallard 在 C# 6 中,您可以通过使用空条件索引运算符来简化它:myJObject["level1property"]?["level2property"]
。【参考方案3】:
JObject.ContainsKey(string propertyName)
已在 11.0.1 版本中作为公共方法
文档 - https://www.newtonsoft.com/json/help/html/M_Newtonsoft_Json_Linq_JObject_ContainsKey.htm
【讨论】:
以上是关于json.net 有关键方法吗?的主要内容,如果未能解决你的问题,请参考以下文章
从 .NET 控制台调用 JSON WebService 的最佳方式