【问题标题】:Why do I get an error when using JToken.Value() method?为什么我在使用 JToken.Value() 方法时会出错?
【发布时间】:2021-06-16 18:22:15
【问题描述】:

下面的 GetValue 方法接收 JSON 格式的传入符号的数据,并使用 Newtonsoft.Json 库将数据转换为动态对象。 TryGetValue 方法是从 JSON 数据中获取作为参数传入的字段名称的值。最后,如果字段有效则返回数据,但如果字段无效,则返回错误消息。

private string GetValue(string symbol, string field)
{
   string json = HttpGet(symbol, field);
   dynamic obj = JsonConvert.DeserializeObject(json);
   var quote = obj.query.results.quote;

   JToken returnValue = null;
   quote.TryGetValue(field, out returnValue);
   if (returnValue != null)
        return returnValue.Value();

   return field + " is not a valid field name.";
}

我的问题在下面一行,我收到错误“没有给定的参数对应于'JToken.Value(object)的所需形式参数'key'”:

return returnValue.Value();

我该如何解决这个错误?

【问题讨论】:

  • json 字符串是什么样的?该方法应该返回什么字符串?可以分享minimal reproducible example吗?
  • 在您使用 dynamic 类型时缺少一些详细信息。使您难以调试
  • @dbc 很抱歉,但我对这整件事有点陌生。为了简单起见,我正在尝试创建一个 Excel RTD 服务器,它从 Yahoo Finance API 获取信息。我已经从这个链接复制了我的代码:add-in-express.com/creating-addins-blog/2014/09/25/…

标签: c# json


【解决方案1】:

我认为this article 有点过时了。 Newtonsoft.Json 库在过去几年中确实有更新。 JToken 中的函数值变得通用。从string JToken.Value();T JToken.Value<T>();。你基本上是对编译器说返回值是一个字符串。

在您的情况下,您可以使用以下方法修复您的代码:

private string GetValue(string symbol, string field)
{
   string json = HttpGet(symbol, field);
   dynamic obj = JsonConvert.DeserializeObject(json);
   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.";
}

我假设以下 json 从 HttpGet(symbol, field) 返回时测试了此代码

    string field = "Test";
    string json = "{ \"query\": { \"results\": { \"quote\": { \"Test\": \"Random\" } } } }";

【讨论】:

    猜你喜欢
    • 2022-07-05
    • 2021-03-04
    • 2010-10-18
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2021-09-10
    • 2019-01-14
    相关资源
    最近更新 更多