我正在尝试修复一个ASP.NET WebAPI方法,在该方法中需要返回Json响应,但实际返回了字符串。
最初它返回的是XML格式,但我已经在App_Start\WebApiConfig.cs中的mvc代码中添加了这行代码,以便默认情况下返回Json。
config.Formatters.Remove(config.Formatters.XmlFormatter);
我们已将C#方法更新如下,使用NewtonSoft:
public string Get()
{
string userid = UrlUtil.getParam(this, "userid", "");
string pwd = UrlUtil.getParam(this, "pwd", "");
string resp = DynAggrClientAPI.openSession(userid, pwd);
JsonSerializer ser = new JsonSerializer();
string jsonresp = JsonConvert.SerializeObject(resp);
return resp;
}
resp变量以字符串类型返回:
"{status:\"SUCCESS\",data:[\"4eb97d2c6729df98206cf214874ac1757649839fe4e24c51d21d\"]}"
jsonresp变量的样式如下:
"\"{status:\\\"SUCCESS\\\",data:[\\\"4eb97d2c6729df98206cf214874ac1757649839fe4e24c51d21d\\\"]}\""
在 Chrome 的 F12 开发者工具中,数据对象为:
""{status:\"SUCCESS\",data:[\"4eb97d2c6729df98206cf214874ac1757649839fe4e24c51d21d\"]}""
在控制台工具中,angular.fromJson(data)的结果是:"{status:"SUCCESS",data:["4eb97d2c6729df98206cf214874ac1757649839fe4e24c51d21d"]}"
我希望能够得到有关如何正确返回Json对象的建议,并且不是任何字符串类型。
更新
通过拦截resp
变量并使用下面Mr. Chu的建议,我可以在客户端成功地获得一个漂亮干净的Json对象。
关键在于resp
需要在每个键值对周围包含双引号:
public HttpResponseMessage Get()
{
string userid = UrlUtil.getParam(this, "userid", "");
string pwd = UrlUtil.getParam(this, "pwd", "");
string resp = DynAggrClientAPI.openSession(userid, pwd);
resp = "{\"status\":\"SUCCESS\",\"data\":[\"194f66366a6dee8738428bf1d730691a9babb77920ec9dfa06cf\"]}"; // TEST !!!!!
var response = Request.CreateResponse(HttpStatusCode.OK);
response.Content = new StringContent(resp, System.Text.Encoding.UTF8, "application/json");
return response;
}
在Chrome控制台中,响应内容为:Object {status: "SUCCESS", data: Array[1]}
data: Array[1]
status: "SUCCESS"
__proto__: Object
resp
是什么?它是一个JSON字符串吗? - Anthony Chu