C# 如何在C中从SQL Server存储过程调用嵌套json到API调用#
在我的存储过程中,我得到了正确的嵌套json,但是当我从Postman调用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
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)