C# 如何在C中从SQL Server存储过程调用嵌套json到API调用#

C# 如何在C中从SQL Server存储过程调用嵌套json到API调用#,c#,json,sql-server,api,C#,Json,Sql Server,Api,在我的存储过程中,我得到了正确的嵌套json,但是当我从Postman调用api时,结果返回斜杠,如下所示。如何从结果中删除这些反斜杠?这种方法是正确的,还是应该采用其他方法 程序如下 ALTER PROCEDIRE [dbo].[USP_MobileApp_MenuList] AS BEGIN SELECT MMM.userid AS userid, MMM.type AS type, MMM.pi

在我的存储过程中,我得到了正确的嵌套json,但是当我从Postman调用api时,结果返回斜杠,如下所示。如何从结果中删除这些反斜杠?这种方法是正确的,还是应该采用其他方法

程序如下

ALTER PROCEDIRE [dbo].[USP_MobileApp_MenuList]              
AS
BEGIN
    SELECT  
        MMM.userid AS userid,  
        MMM.type AS type,  
        MMM.pid AS pid,  
        mmm.pname AS pname,  
        mmm.url AS url,  
        Smenu = (SELECT  
                     MMS.sid AS sid,  
                     MMS.sname AS sname,  
                     MMS.icon AS icon,  
                     MMS.url AS url  
                 FROM M_MobileApp_SubMenu MMS 
                 WHERE MMS.pid = MMM.pid  
                 FOR JSON PATH)  
    FROM 
        M_MobileApp_Menu MMM) A  
END
web Api调用代码是

[HttpGet]
[Route("getMobileMenulist")]
public HttpResponseMessage GetMobileMenuliste(HttpRequestMessage objrequest)
{
        DBdata objLogin = new DBdata();
        HttpResponseMessage respone = Request.CreateResponse(HttpStatusCode.OK, objLogin.GetMobileMenulist());
       
        return respone;
}

public object GetMobileMenulist()
{
        DataTable objData = new DataTable();

        Query = "USP_MobileApp_MenuList";

        try
        {
            using (ObjSqlConnection = new SqlConnection(MDMSConnectionString))
            {
                using (ObjSqlCommand = new SqlCommand(Query, ObjSqlConnection))
                {
                    ObjSqlCommand.CommandType = CommandType.StoredProcedure;

                    using (SqlDataAdapter sda = new SqlDataAdapter())
                    {
                        ObjSqlConnection.Open();
                        sda.SelectCommand = ObjSqlCommand;
                        sda.Fill(objData);

                        //for (int i = 0; i <= objData.Rows.Count - 1; i++)
                        //{
                        //    objData.Rows[i][1] = objData.Rows[i][1].ToString().Replace(@"\", "");
                        //}

                        ObjSqlConnection.Close();
                    }
                }

            }
            return objData;
        }
        catch (Exception ex)
        {
            Log = new Logger();
            Log.writeErrorLog(ex, 0, ex.Message);
            //objLog.LogError(ex);
        }
        finally
        {
            if (ObjSqlConnection.State != ConnectionState.Closed)
            {
                ObjSqlConnection.Close();
                ObjSqlConnection.Dispose();
            }
        }
        return objData;
}

SQL Server没有本机JSON类型(或BJSON),并将JSON存储为字符串。读取后,只需将其转换为JSON:

let x = "[{\"sid\":1,\"sname\":\"Comparison\",\"icon\":\"fa fa-shower\",\"url\":\"/ConsumtionLog/Comparison\"},{\"sid\":2,\"sname\":\"History\",\"url\":\"/ConsumtionLog/History\"}]"

let y = JSON.parse(x)

查询返回1列JSON,其余为非JSON。然后Web API CreateResponse()内容协商将序列化整个结果,即JSON将被序列化两次。您可以从SQL返回完整的JSON对象,然后自己分配响应内容。或者有一种C#方法可以通过一次返回2个查询并序列化所有查询来实现
let x = "[{\"sid\":1,\"sname\":\"Comparison\",\"icon\":\"fa fa-shower\",\"url\":\"/ConsumtionLog/Comparison\"},{\"sid\":2,\"sname\":\"History\",\"url\":\"/ConsumtionLog/History\"}]"

let y = JSON.parse(x)