将C#对象转为json字符串,如何处理双引号

我正在使用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; } 

编辑:这是来自响应fidder 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字符串

我不认为这是一个有效的字符串,我错了吗?

最后,解决这个问题。 与你们分享。

根本原因:
我的猜测是它是双序列化问题。 看来ASP.NET web api 2框架会自动为我们做序列化 。 这就是为什么我SerializeObject然后Debug.Write(json)字符串,它运作良好。

 string json = JsonConvert.SerializeObject(rs); Debug.Write(json); 

但是在fiddler调用web API之后,web API返回了无效的json(\“)响应,如上所述。这在其他客户端如ios,android设备上也是如此。

因为web api为我做了序列化,我还做了一个额外的显式序列化, string json = JsonConvert.SerializeObject(rs); 这意味着我运行另一个不需要的parseJson。

根据我的问题,我只是在CreateResponse方法中直接放置未序列化的对象。 Request.CreateResponse(HttpStatusCode.Created, rs); 它为fidder和其他客户端返回有效的json。

我如何解决这个问题: 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); 

我怀疑你在调试器中看到了这一点。 它不是实际的字符串,只是visual studio调试器中的表示。 例如,我测试了这段代码:

 private static void Main(string[] args) { var station = new Station {Name = "Duren Kalibata", LastTemperature = 45, MostRecentDate = DateTime.Now}; var str = JsonConvert.SerializeObject(station); Console.WriteLine(str); } 

视觉工作室观察窗口中显示的str值如何: 在此处输入图像描述

如何在控制台中打印实际字符串: 在此处输入图像描述

结论:Newtonsoft.Json应该将对象转换为正确的json字符串表示。 无需进一步努力。

更新:

回应你的编辑,我有一种强烈的感觉,它再次只是在另一个工具(提琴手)中的相同表现forms。 这个\"是许多编程平台中双引号的表示,因为普通的双引号( " )被认为是字符串的结尾/开头(只是说,如果你错过了那个信息)。