来自SQL Server的json格式化响应如何工作?

Jon*_*eal 4 c# sql asp.net json

我有一个存储过程,将查询结果作为json返回,我想了解这个查询将如何在ASP.NET应用程序中获取我的代码.

存储过程:

Select 
       SUBJECT AS [subject],
       STARTDATE AS [start]
       ENDDATE AS [end],
       ID AS [id]
FROM 
       SOME_TABLE
FOR JSON PATH
Run Code Online (Sandbox Code Playgroud)

存储过程中的Json格式:

[
 {
  "subject": _,
  "start": _,
  "end":_,
  "id":_
 },
 ...]
Run Code Online (Sandbox Code Playgroud)

aspx.cs代码隐藏

(来自函数的片段)

  try
        {
            if (sqlcon.State == ConnectionState.Closed)
            {
                sqlcon.Open();
            }

            SqlCommand sccmd = new SqlCommand("MY_STORED_PROCEDURE", sqlcon);
            sccmd.CommandType = CommandType.StoredProcedure;
            sccmd.Parameters.AddWithValue("@value1", valueID);
            sccmd.Parameters.AddWithValue("@value2", valueID);
            SqlDataReader sdrreader = sccmd.ExecuteReader();

            while (sdrreader.Read())
            {
                // lost on what to do here
            }

            sdrreader.Close();
        }
        catch (Exception ex){}
        finally { sqlcon.Close(); }
Run Code Online (Sandbox Code Playgroud)

我想在我的代码中存储这个json响应,但我不知道如何.在做出响应json之前,我正在使用SqlDataReaderRead()来遍历每条记录,但如果响应现在是json,它将如何工作; 还有另一个专门处理json响应的类吗?

请澄清!

Sam*_*Axe 8

  1. 通过NuGet 安装JSON.NET.

  2. 创建一个代码模型来镜像你的json.

    public class JsonModel {  
        public int id {get;set;}  
        public DateTime start {get;set;}   
        public DateTime end {get;set;}  
        public string subject {get;set;}  
    }  
    
    Run Code Online (Sandbox Code Playgroud)
  3. 从数据库中获取json编码数据

    string json = String.Empty;
    using (SqlConnection connection = new SqlConnection("... your connection string ...") {
        connection.Open();
        using (SqlCommand command = new SqlCommand("SELECT FROM... FOR JSON PATH", connection) {
            json = command.ExecuteScalar();
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  4. 将其反序列化为您的模型

    var JsonModel model = JsonConvert.DeserializeObject<JsonModel>(json);
    
    Run Code Online (Sandbox Code Playgroud)
  5. 喝龙舌兰酒,吃法加它!