【问题标题】:Cannot implicitly convert type 'Newtonsoft.Json.Linq.JToken' to 'string'. An explicit conversion exists (are you missing a cast?)无法将类型“Newtonsoft.Json.Linq.JToken”隐式转换为“字符串”。存在显式转换(您是否缺少演员表?)
【发布时间】:2016-08-24 22:12:44
【问题描述】:

我有以下代码:

WebClient c = new WebClient();
var data = c.DownloadString("https://btc-e.com/api/2/btc_usd/ticker");
//Console.WriteLine(data);
JObject o = JObject.Parse(data);
maskedTextBox11.Text = o["high"];

但它在标题中给出了错误。

【问题讨论】:

  • 如果我们看到你的代码会更好..
  • 错误信息的哪一部分你不明白?
  • 我的坏笑添加了代码
  • 如前所述明确地投射它怎么样!? maskedTextBox11.Text = (string)o["high"];

标签: c# .net json


【解决方案1】:

您只需要添加o["high"].ToString(); 而不是o["high"];,因为JObject[] 返回一个JToken,而您正在尝试分配maskedTextBox11.Text,它是一个string

如果你想要令牌所代表的对象的ToString(),你可以这样做:

MyType obj = o["high"].ToObject<MyType>();
string s = obj.ToString();

【讨论】:

    【解决方案2】:

    high 在对象ticker 中。

    {
      "ticker": {
        "high": 730,
        "low": 671,
        "avg": 700.5,
        "vol": 9878677.9487,
        "vol_cur": 14084.99793,
        "last": 708.1,
        "buy": 708.1,
        "sell": 707.123,
        "updated": 1391962469,
        "server_time": 1391962470
      }
    }
    

    所以首先找到正确的对象,然后将其转换为字符串。

    您的代码将是这样的:

    maskedTextBox11.Text = (string)o["ticker"]["high"];
    

    或者,您也可以使用dynamic

    dynamic o = JObject.Parse(data);
    maskedTextBox11.Text = o.ticker.high;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多