Reputation: 719
Form a third party system deserialize json data to the object/class format and write data into a SQL Server table from a asp.net web api. When I run the below code I run into the following error
cannot convert json collection to string
I am using System.Web.Extensions dll to deserialize json data.
JSON:
{
"data":[
{
"Id":"1",
"Student":"T code",
"Grade":"Test code"
}
],
"Token":"",
"header":[
"Id",
"Student",
"Grade"
],
"Rowcount":1
}
My model:
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; }
}
My controller:
[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;
}
}
Upvotes: 3
Views: 2101
Reputation: 3634
your model classes should be like this.
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; }
}
you do not need an extra serializer on web api. asp.net web api supports json-xml media types by default.
[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;
}
}
}
Upvotes: 3