使用c#导入json数据

时间:2018-01-30 05:12:10

标签: c# asp.net json asp.net-web-api

组建第三方系统将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;
    }
}

1 个答案:

答案 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;
            }
        }
    }