组建第三方系统将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;
}
}
答案 0 :(得分:3)
你的模型类应该是这样的。
public class Student
{
public string Id { get; set; }
public string Student { get; set; }
public string Grade { get; set; }
}
public class RequestModel
{
public List<Student> data { get; set; }
public string Token { get; set; }
public List<string> header { get; set; }
public int Rowcount { get; set; }
}
您不需要在网络API上添加额外的序列化程序。 asp.net web api默认支持json-xml媒体类型。
[HttpPost]
public IHttpActionResult Post(RequestModel studentjson)
{
string SQLConnectionString = ConfigurationManager.ConnectionStrings["SQLConnectionString"].ConnectionString;
using (SqlConnection conn = new SqlConnection(SQLConnectionString))
{
conn.Open();
try
{
foreach (var student in studentjson.data)
{
if (writetotbl(conn, student.Student))
{
Console.WriteLine(string.Format("Id:{0}, Student:{1}, Grade:{2}", student.Id, student.Student, student.Grade));
}
else
{
Console.WriteLine("Error : " + student.Student);
}
}
conn.Close();
}
catch (Exception ex)
{
// make sure the connection is closed
if (conn.State != System.Data.ConnectionState.Closed)
conn.Close();
throw;
}
}
}