【发布时间】:2019-07-07 20:48:04
【问题描述】:
我有一个返回 JSON 的 SQL Server proc。我知道 proc 正在工作并返回有效的 JSON,因为我可以使用包括 SQL 函数 isjson 在内的各种工具对其进行测试。
但是,一些工具在调用我的 API 来调用这些过程时,无法验证 JSON,因为它被双引号包裹并转义了 JSON 中的每个双引号。
这是 SQL 输出:
{"APIResult":[{"ID":200,"Status_Message":"Success","Developer_Message":"Successful login for D56D10AC-3A74-42FC-8BB5-F783A6C0C556 33E4F907-F1E5-4F1B-8CA5-5521291E683A (AppID: (null)).","User_Message":"Successful login","User":[{"ID":"D56D10AC-3A74-42FC-8BB5-F783A6C0C556"}]}]}
这是邮递员的输出:
"{\"APIResult\":[{\"ID\":200,\"Status_Message\":\"Success\",\"Developer_Message\":\"Successful login for D56D10AC-3A74-42FC-8BB5-F783A6C0C556 33E4F907-F1E5-4F1B-8CA5-5521291E683A (AppID: (null)).\",\"User_Message\":\"Successful login\",\"User\":[{\"ID\":\"D56D10AC-3A74-42FC-8BB5-F783A6C0C556\"}]}]}"
某些解析工具 (jsonlint) 可以使用第二种格式并将其作为有效 JSON 返回。其他人(http://json.parser.online.fr/),没那么多。 Postman 显然很高兴,但我的移动开发人员无法让它作为有效的 JSON 工作。
在这里得到一些帮助后,我了解到 API“应该”输出应用程序/JSON 的标头内容类型,并且输出不应该是字符串。
控制器有:
public string Get(string key) {
string message = "";
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(cmd2);
da.Fill(ds);
message = ds.Tables[0].Rows[0][0].ToString();
return message;
}
这意味着它正在被转换为字符串。
所以我的问题是:
如何在输出中设置标头,使其返回 JSON 而不是字符串?
【问题讨论】:
-
更新问题以包含控制器操作定义。动作的返回类型是什么?
-
这是标题。消息定义为字符串 public string Get(string key) { string message = "";
-
JSON 是一个字符串,但是当您在选择的调试工具中显示一个字符串时,它可能会将字符串用双引号
"括起来,并转义字符串中包含的任何双引号。这不是字符串的文字内容,它只是字符串内容的表示。
标签: c# asp.net json asp.net-web-api