【发布时间】:2018-07-08 22:00:31
【问题描述】:
形成第三方系统将json数据反序列化为对象/类格式,并从asp.net web api将数据写入SQL Server表。当我运行下面的代码时,我遇到了以下错误
无法将 json 集合转换为字符串
我正在使用 System.Web.Extensions dll 反序列化 json 数据。
JSON:
{
"data":[
{
"Id":"1",
"Student":"T code",
"Grade":"Test code"
}
],
"Token":"",
"header":[
"Id",
"Student",
"Grade"
],
"Rowcount":1
}
我的模特:
public class Student
{
public string Id { get; set; }
public string Student { get; set; }
public string Grade { get; set; }
}
public class AllStudents
{
public IList<SData> data { get; set; }
}
我的控制器:
[HttpPost]
public IHttpActionResult Post(Student studentjson)
{
IList<SData> StudentList = studentjson.data;
var serializer = new JavaScriptSerializer();
Student StudentObj = serializer.Deserialize<Student>(studentjson.data.ToString());
string SQLConnectionString = ConfigurationManager.ConnectionStrings["SQLConnectionString"].ConnectionString;
using (SqlConnection conn = new SqlConnection(SQLConnectionString))
{
conn.Open();
foreach (var student in StudentObj.data)
{
if (writetotbl(conn, student))
{
Console.WriteLine("Success : " + student.Student);
}
else
{
Console.WriteLine("Error : " + student.Student);
}
}
}
}
static bool writetotbl(SqlConnection conn, studentjson StudentObj)
{
try
{
string query = @"INSERT INTO [dbo].[student] ([student]) VALUES (@student)";
using (SqlCommand cmd = new SqlCommand(query, conn))
{
cmd.Parameters.Add(new SqlParameter("@student", StudentObj.student));
cmd.ExecuteNonQuery();
}
return true;
}
catch (Exception ex)
{
return false;
}
}
【问题讨论】:
-
您的 post 方法没有 json 参数 .. 我认为您不需要在 webapi 中序列化 json .. 您需要详细说明一下
-
@CodingYoshi:我仍然无法显式转换为类型错误。
-
@Aamir:请允许我指出一些不必在 webapi 中反序列化 json 的示例。
-
IList
StudentList = studentjson.data;如果您不在任何地方使用 StudentList,为什么要写这个。我觉得这会中断,因为你 studentjson.data 是字符串。 -
如果您有匹配的 C# 类,模型绑定器将自动反序列化您的数据。虽然您的模型令人困惑 - 您有一个“学生”对象作为输入,然后您希望它上面有一个“数据”属性,但您的学生 C# 类中没有定义,因此不太可能存在。但是为什么在一个学生里面有一个学生列表呢?结构没有意义。而且你上面的代码也不会因为其他原因编译。这是你的真实代码吗?
标签: c# asp.net json asp.net-web-api