C# &引用;System.ArgumentException:';不存在从对象类型Newtonsoft.Json.Linq.JValue到已知托管提供程序本机类型的映射;
我正在尝试从JSON数组响应中插入数据,这是我作为响应得到的。但是,我不断收到一个“System.ArgumentException:'不存在从对象类型Newtonsoft.Json.Linq.JValue到已知托管提供程序本机类型的映射。”“向我抛出的错误。我拥有的代码和JSON数组如下: 我尝试过谷歌搜索,向我的同龄人询问答案,但都没有用。我想知道,既然JSON对象是序列化的,那么在将其保存到数据库之前是否需要对其进行更改?同时,我得到的最常见的答案是在文本字段区域中添加.Text的扩展名 JSON数组:C# &引用;System.ArgumentException:';不存在从对象类型Newtonsoft.Json.Linq.JValue到已知托管提供程序本机类型的映射;,c#,sql,arrays,deserialization,C#,Sql,Arrays,Deserialization,我正在尝试从JSON数组响应中插入数据,这是我作为响应得到的。但是,我不断收到一个“System.ArgumentException:'不存在从对象类型Newtonsoft.Json.Linq.JValue到已知托管提供程序本机类型的映射。”“向我抛出的错误。我拥有的代码和JSON数组如下: 我尝试过谷歌搜索,向我的同龄人询问答案,但都没有用。我想知道,既然JSON对象是序列化的,那么在将其保存到数据库之前是否需要对其进行更改?同时,我得到的最常见的答案是在文本字段区域中添加.Text的扩展名
"data": [
{
"device": "deviceone",
"time": 2359,
"data": "0000th34"
}]
如前所述,引发错误的消息是“对象类型Newtonsoft.Json.Linq.JValue到已知托管提供程序本机类型的映射不存在。”尝试这样做,即只添加.ToString()`如下代码所示,因为错误来自将对象作为参数值发送。它必须是字符串、int、bool等
using (SqlCommand cmd = new SqlCommand("Insert into devicedata(device,time,data) VALUES (@device,@time,@data)", con))
{
cmd.Parameters.AddWithValue("@device", jsonObj.data[0].device.ToString());
cmd.Parameters.AddWithValue("@time", jsonObj.data[0].time.ToString());
cmd.Parameters.AddWithValue("@data", jsonObj.data[0].data.ToString());
cmd.ExecuteNonQuery(); // Running the code will result in the error being thrown
}
请调试代码并找出jsonObj.data[0]返回的内容。数据`?您是否也可以放置您正在使用的json或json结构?是的,您需要将变量强制转换为与数据库列类型对应的类型,然后再将其添加为参数,或者至少转换为一种类型,并隐式转换为所需的参数类型。@PranayRana我已经编辑了question@iakobski网上有没有教这方面的教程?我很不擅长编程对不起。谢谢你的输入!它已成功保存到数据库中@DanZainal-欢迎,如果为您工作,请接受回答
using (SqlCommand cmd = new SqlCommand("Insert into devicedata(device,time,data) VALUES (@device,@time,@data)", con))
{
cmd.Parameters.AddWithValue("@device", jsonObj.data[0].device.ToString());
cmd.Parameters.AddWithValue("@time", jsonObj.data[0].time.ToString());
cmd.Parameters.AddWithValue("@data", jsonObj.data[0].data.ToString());
cmd.ExecuteNonQuery(); // Running the code will result in the error being thrown
}