无法将类型“newtonsoft.json.linq.jtoken”隐式转换为 newt“newtonsoft.json.linq.jvalue”

Posted

技术标签:

【中文标题】无法将类型“newtonsoft.json.linq.jtoken”隐式转换为 newt“newtonsoft.json.linq.jvalue”【英文标题】:cannot implicitly convert type 'newtonsoft.json.linq.jtoken' to newt 'newtonsoft.json.linq.jvalue' 【发布时间】:2018-10-02 04:25:49 【问题描述】:

我正在使用 Visual Studio 开发一个 web api,我的 post api 应该从正文中读取值并从数据库中返回一个数组,但我得到了标题中列出的错误。

这是我的代码:

  [HttpPost]
    public IHttpActionResult getsub([FromBody] JObject data)
    

        using (GaminBrainEntities entities = new GaminBrainEntities())
        
            JValue id = data.SelectToken("pk");
            return Ok(entities.SP_Brands_Get_By_Category(id).ToArray);
        
    

如何更改我的代码以修复错误?

【问题讨论】:

【参考方案1】:

SelectToken 方法的返回类型是 JToken 并且它不是从 JToken 隐式转换为 JValue 所以这个错误是由编译器抛出的,所以将 id 的类型更改为 JToken 然后编译器会很高兴。

JToken id = data.SelectToken("");

而且由于 ToArray 是方法,您的 return 语句也会抛出错误,因此您必须用括号编写 ToArray()。这将解决您的另一个错误。如果您的 id 是整数值,则首先将其转换为整数,然后将其传递给存储过程。

int idValue= id.ToObject<int>();

return Ok(entities.SP_Brands_Get_By_Category(idValue).ToArray());

【讨论】:

我做到了,但后来我得到另一个编译器错误返回 Ok(entities.SP_Brands_Get_By_Category(id).ToArray); 无法从 newtonsoft.json.linq.jtoken 转换为 long,对于存储过程中的“id” id 中的值是多少?如果它可以在 long 中转换,那么您必须首先通过显式将其转换为 long 然后将其传递给存储过程 我已经编辑了我的答案,请检查并尝试这将解决您的错误。并使用 try catch 处理异常 我在 vb 中使用相同的代码并且对我来说效果很好,我不知道为什么在 c# 中会发生这种情况

以上是关于无法将类型“newtonsoft.json.linq.jtoken”隐式转换为 newt“newtonsoft.json.linq.jvalue”的主要内容,如果未能解决你的问题,请参考以下文章

C# 无法将类型为“System.Byte[]”的对象强制转换为类型“System.Data.DataTable

无法将类型“[PHAsset]”的值分配给类型“UIImageView!”

无法将 [Struct] 类型的值快速转换为 [string] 类型

无法将类型“()”的值转换为预期的参数类型“字符串”

无法将“字符串”类型的值转换为预期的参数类型 [任何]

无法将值类型“()”分配给字符串类型?