无法将类型“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!”