使用JToken.Value()方法提示缺少key形参报错该如何修复?
错误原因
Newtonsoft.Json 中JToken的Value方法为泛型方法,必须显式指定要转换的目标类型作为泛型参数,无参调用不符合方法签名要求,因此触发缺少必填参数的报错。
修复方案
你的方法返回值为string类型,直接修改报错行,调用泛型版本并指定目标类型为string即可:
return returnValue.Value<string>();
如果不需要强类型校验,仅需要获取值的字符串表示,也可以直接调用ToString方法:
return returnValue.ToString();
可选优化
为了避免JSON结构不符合预期时触发空引用异常,可以补充对JSON层级的判空逻辑,修改后完整代码如下:
private string GetValue(string symbol, string field) { string json = HttpGet(symbol, field); dynamic obj = JsonConvert.DeserializeObject(json); // 前置判空避免结构异常时报错 if (obj?.query?.results?.quote == null) { return "返回数据结构异常"; } var quote = obj.query.results.quote; JToken returnValue = null; quote.TryGetValue(field, out returnValue); if (returnValue != null) return returnValue.Value<string>(); return field + " is not a valid field name."; }
内容的提问来源于stack exchange,提问作者wz16
相关产品推荐
相关产品推荐

