我正在使用Newtonsoft.Json将对象解析为json字符串。它返回这样的想法:
{\"code\":-1,\"idName\":\"empty\",\"idValue\":0,\"message\":\"Failed,can not read object from body\"}
我认为这不是有效的json字符串,任何人都可以解决我的问题?
我想要的是这样的:
{"code":-1,"idName":"empty\",\"idValue\":0,\"message\":\"Failed,can not read object from body\"} public static class CommonUtility { // format response string public static string FormatResponseString(int code, string idName, long idValue, string message) { ResponseString rs = new ResponseString(); rs.code = code; rs.idName = idName; rs.idValue = idValue; rs.message = message; string json = JsonConvert.SerializeObject(rs); return json; } } public class ResponseString { public int code; public string idName; public long idValue; public string message; }
编辑:这是来自响应字段TextView的实际json,我可以看到:
"{\"code\":-1,\"idName\":\"empty\",\"idValue\":0,\"message\":\"Failed,can not read object from body\"}"
情况是这样的:我将序列化的json字符串放在Web api CreateResponse方法中。我可以在fidder中看到响应字符串,就像我在无效的json问题中所说的那样
Request.CreateResponse(HttpStatusCode.Created, returnString);
returnString是来自序列化ResponseString对象的json字符串
returnString
ResponseString
我不认为这是有效的字符串,对吗?
最后,解决此问题。与你们分享。
根本原因: 我的猜测是这是双重序列化问题。看来 ASP.NET Web API 2框架将为我们自动进行序列化 。这就是为什么我SerializeObject再加Debug.Write(json)上字符串都能很好地工作的原因。
SerializeObject
Debug.Write(json)
string json = JsonConvert.SerializeObject(rs); Debug.Write(json);
但是在提琴手调用了Web API之后,Web API返回了带有无效json(\“)的响应,正如我上面所说的。在其他客户端(例如ios,android设备)上也是如此。
因为网络api为我执行了序列化,并且我进行了额外的显式序列化,这也string json = JsonConvert.SerializeObject(rs); 意味着我运行了另一个不需要的parseJson。
string json = JsonConvert.SerializeObject(rs);
根据我在这里的问题,我只是直接将未序列化的对象放在CreateResponse方法中。Request.CreateResponse(HttpStatusCode.Created, rs);并返回该fidder和其他客户端的有效json。
CreateResponse
Request.CreateResponse(HttpStatusCode.Created, rs);
我该如何解决此问题: Request.CreateResponse(HttpStatusCode.Created,rs);
public static class CommonUtility { // format response string public static ResponseString FormatResponseString(int code, string idName, long idValue, string message) { ResponseString rs = new ResponseString(); rs.code = code; rs.idName = idName; rs.idValue = idValue; rs.message = message; return rs ; } } public class ResponseString { public int code; public string idName; public long idValue; public string message; }
并在控制器中
ResponseString rs = new ResponseString(); rs = CommonUtility.FormatResponseString(0, "pacelId", returnPacelId, "Succeed,created items in db success"); return Request.CreateResponse(HttpStatusCode.Created, rs);