【问题标题】:Import json data using c#使用c#导入json数据
【发布时间】: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


【解决方案1】:

你的模型类应该是这样的。

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

您不需要在 web 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;
            }
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    • 2015-02-03
    • 1970-01-01
    相关资源
    最近更新 更多