试图使用json数组在带有c#的sql中插入数据,但仍然得到Newtonsoft.json.Linq.JValue错误?
我将JSON数据数组从客户端传递到服务器端(c#)。但是,当我尝试将此数据插入到SQL表中时,就在查询执行的那一刻,我得到了这个试图使用json数组在带有c#的sql中插入数据,但仍然得到Newtonsoft.json.Linq.JValue错误?,c#,sql,json,asp.net-mvc,C#,Sql,Json,Asp.net Mvc,我将JSON数据数组从客户端传递到服务器端(c#)。但是,当我尝试将此数据插入到SQL表中时,就在查询执行的那一刻,我得到了这个Newtonsoft.Json.Linq.JValue 以下是我目前掌握的代码: 客户(js) 服务器端(C#): 你知道会出什么问题吗?因为你使用的是非通用版本的,JSON.Net会将所有东西反序列化到它自己的对象中,比如JObject和JValue。而且,由于您通过使用dynamic隐藏了所有这些,因此您很容易受到各种运行时错误的影响 然而,如果您使用具体的类,您将
Newtonsoft.Json.Linq.JValue
以下是我目前掌握的代码:
客户(js)
服务器端(C#):
你知道会出什么问题吗?因为你使用的是非通用版本的,JSON.Net会将所有东西反序列化到它自己的对象中,比如
JObject
和JValue
。而且,由于您通过使用dynamic
隐藏了所有这些,因此您很容易受到各种运行时错误的影响
然而,如果您使用具体的类,您将获得类型安全代码。例如:
public class MyThing
{
public string idCotizacion { get; set; }
public string idProyecto { get; set; }
public string nombreProyecto { get; set; }
public string idProducto { get; set; }
}
现在使用以下命令:
var cotizaciones=JsonConvert.DeserializeObject(json);
您的代码的其余部分应该适合,但现在更加清晰和安全
另外,您不应该使用。因为您使用的是的非通用版本,JSON.Net会将所有内容反序列化到它自己的对象,如
JObject
和JValue
。而且,由于您通过使用dynamic
隐藏了所有这些,因此您很容易受到各种运行时错误的影响
然而,如果您使用具体的类,您将获得类型安全代码。例如:
public class MyThing
{
public string idCotizacion { get; set; }
public string idProyecto { get; set; }
public string nombreProyecto { get; set; }
public string idProducto { get; set; }
}
现在使用以下命令:
var cotizaciones=JsonConvert.DeserializeObject(json);
您的代码的其余部分应该适合,但现在更加清晰和安全
另外,您不应该使用。根据您发布的代码,我将实现一个Cotizacion类:
public class Cotizacion {
public string idCotizacion {get; set;}
public string idProyecto {get; set;}
public string nombreProyecto {get; set;}
public string idProducto{get; set;}
}
然后做一些类似的事情:
public string GuardarCotizacion(string json)
{
string SP_INSERTA_COTIZACIONPI = "SVI_CPI_COTIZACION_PI";
var cotizaciones = JsonConvert.DeserializeObject<List<Cotizacion>>(json);
foreach (var cotizacion in cotizaciones)
{
using (SqlConnection conexion = new SqlConnection(Inventa.PazCorp.Data.BaseDatos.StringConexionGestionContactos(System.Configuration.ConfigurationManager.AppSettings["ambiente"].ToString())))
{
conexion.Open();
using (SqlCommand comm = new SqlCommand(SP_INSERTA_COTIZACIONPI, conexion))
{
comm.CommandType = System.Data.CommandType.StoredProcedure;
comm.Parameters.AddWithValue("IDCOTIZACION", cotizacion.idCotizacion);
comm.Parameters.AddWithValue("IDPROYECTO", cotizacion.idProyecto);
comm.Parameters.AddWithValue("NOMBRE_PROYECTO", cotizacion.nombreProyecto);
comm.Parameters.AddWithValue("IDPRODUCTO", cotizacion.idProducto);
comm.ExecuteNonQuery(); //Here is where the error appears
}
}
}
return json;
}
公共字符串GuardarCotizacion(字符串json)
{
字符串SP_INSERTA_COTIZACIONPI=“SVI_CPI_COTIZACION_PI”;
var cotizaciones=JsonConvert.DeserializeObject(json);
foreach(协作中的var协作)
{
使用(SqlConnection conexion=newsqlconnection(Inventa.PazCorp.Data.BaseDatos.StringConexionGestionContactos(System.Configuration.ConfigurationManager.AppSettings[“ambiente”].ToString()))
{
conexion.Open();
使用(SqlCommand=newsqlcommand(SP_INSERTA_COTIZACIONPI,conexion))
{
comm.CommandType=System.Data.CommandType.StoredProcess;
comm.Parameters.AddWithValue(“IDCOTIZACION”,cotizacion.IDCOTIZACION);
comm.Parameters.AddWithValue(“IDPROYECTO”,cotizacion.IDPROYECTO);
comm.Parameters.AddWithValue(“NOMBRE_PROYECTO”,cotizacion.nombreProyecto);
comm.Parameters.AddWithValue(“IDPRODUCTO”,协同IDPRODUCTO);
comm.ExecuteNonQuery();//此处显示错误
}
}
}
返回json;
}
根据您发布的代码,我将实现一个Cotizacion类:
public class Cotizacion {
public string idCotizacion {get; set;}
public string idProyecto {get; set;}
public string nombreProyecto {get; set;}
public string idProducto{get; set;}
}
然后做一些类似的事情:
public string GuardarCotizacion(string json)
{
string SP_INSERTA_COTIZACIONPI = "SVI_CPI_COTIZACION_PI";
var cotizaciones = JsonConvert.DeserializeObject<List<Cotizacion>>(json);
foreach (var cotizacion in cotizaciones)
{
using (SqlConnection conexion = new SqlConnection(Inventa.PazCorp.Data.BaseDatos.StringConexionGestionContactos(System.Configuration.ConfigurationManager.AppSettings["ambiente"].ToString())))
{
conexion.Open();
using (SqlCommand comm = new SqlCommand(SP_INSERTA_COTIZACIONPI, conexion))
{
comm.CommandType = System.Data.CommandType.StoredProcedure;
comm.Parameters.AddWithValue("IDCOTIZACION", cotizacion.idCotizacion);
comm.Parameters.AddWithValue("IDPROYECTO", cotizacion.idProyecto);
comm.Parameters.AddWithValue("NOMBRE_PROYECTO", cotizacion.nombreProyecto);
comm.Parameters.AddWithValue("IDPRODUCTO", cotizacion.idProducto);
comm.ExecuteNonQuery(); //Here is where the error appears
}
}
}
return json;
}
公共字符串GuardarCotizacion(字符串json)
{
字符串SP_INSERTA_COTIZACIONPI=“SVI_CPI_COTIZACION_PI”;
var cotizaciones=JsonConvert.DeserializeObject(json);
foreach(协作中的var协作)
{
使用(SqlConnection conexion=newsqlconnection(Inventa.PazCorp.Data.BaseDatos.StringConexionGestionContactos(System.Configuration.ConfigurationManager.AppSettings[“ambiente”].ToString()))
{
conexion.Open();
使用(SqlCommand=newsqlcommand(SP_INSERTA_COTIZACIONPI,conexion))
{
comm.CommandType=System.Data.CommandType.StoredProcess;
comm.Parameters.AddWithValue(“IDCOTIZACION”,cotizacion.IDCOTIZACION);
comm.Parameters.AddWithValue(“IDPROYECTO”,cotizacion.IDPROYECTO);
comm.Parameters.AddWithValue(“NOMBRE_PROYECTO”,cotizacion.nombreProyecto);
comm.Parameters.AddWithValue(“IDPRODUCTO”,协同IDPRODUCTO);
comm.ExecuteNonQuery();//此处显示错误
}
}
}
返回json;
}
调用/Ajax/GuardaCotizacionesPI
,然后显示一个名为GuardarCotizacion
的方法。第一个如何连接到第二个?为什么要反序列化到dynamic
?使用一个具体的类,所有这些都会消失。此外,每次使用dynamic
,都会有一只小猫死亡。@peterB它们通过一个controller@DavidG当前位置正在讲最纯粹的真理。为什么要使用dynamic?您应该使用显式类型。尝试在Cotizaciones类中实现一个列表,并使用JsonConvert.DeserializeObject(json)。您可以调用/Ajax/GuardaCotizacionesPI
,但随后显示了一个名为GuardarCotizacion
的方法。第一个如何连接到第二个?为什么要反序列化到dynamic
?使用一个具体的类,所有这些都会消失。此外,每次使用dynamic
,都会有一只小猫死亡。@peterB它们通过一个controller@DavidG当前位置正在讲最纯粹的真理。为什么要使用dynamic?您应该使用显式类型。尝试在Cotizaciones类中实现一个列表,并使用JsonConvert.DeserializeObject(json)。