将C#对象转换为json字符串,如何处理双引号
我使用Newtonsoft.Json将对象解析为Json字符串。它返回一些类似这样的想法:将C#对象转换为json字符串,如何处理双引号,c#,json,serialization,json.net,C#,Json,Serialization,Json.net,我使用Newtonsoft.Json将对象解析为Json字符串。它返回一些类似这样的想法: {\"code\":-1,\"idName\":\"empty\",\"idValue\":0,\"message\":\"Failed,can not read object from body\"} {"code":-1,"idName":"empty\",\"idValue\":0,\"message\":\"Failed,can not read object from body\"} 我
{\"code\":-1,\"idName\":\"empty\",\"idValue\":0,\"message\":\"Failed,can not read object from body\"}
{"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\"}
{"code":-1,"idName":"empty\",\"idValue\":0,\"message\":\"Failed,can not read object from body\"}
编辑:这是响应FIDER 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字符串
我不认为这是一个有效的字符串,我错了吗?我怀疑您在调试器中看到了这一点。它不是实际的字符串,只是VisualStudio调试器中的表示形式。例如,我使用以下代码进行了测试:
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);
}
如何在visual studio监视窗口中显示str
值:
如何在控制台中打印实际字符串:
结论:Newtonsoft.Json应该已经将对象转换为正确的Json字符串表示形式。无需进一步努力
更新:
对于您的编辑,我有一种强烈的感觉,它再次是另一个工具(fiddler)中的相同表示。在许多编程平台中,这是双引号的表示形式,因为普通双引号(
“
)被视为字符串的结尾/开头(只是说,以防您错过该信息)。最后,修复此问题。和你们分享
根本原因:我猜这是双重序列化的问题。 看来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);
并为FIDER和其他客户端返回有效的json
如何解决此问题:
Request.CreateResponse(HttpStatusCode.Created,rs)
在控制器中
ResponseString rs = new ResponseString();
rs = CommonUtility.FormatResponseString(0, "pacelId", returnPacelId, "Succeed,created items in db success");
return Request.CreateResponse(HttpStatusCode.Created, rs);
是您在调试器的工具提示中向我们显示的字符串吗?@Dirk,来自FIDER而不是调试器。服务器api是asp.net web api 2TNX用于更新,我知道\“是双引号的表示。问题是,android程序员说她收到的也是无效的json字符串。他试图反对json stirng,但她得到了json格式无效的异常。