gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:50:17 26 4
gpt4 key购买 nike

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

在 Controller 中

ResponseString rs = new ResponseString();
rs = CommonUtility.FormatResponseString(0, "pacelId", returnPacelId, "Succeed,created items in db success");
return Request.CreateResponse(HttpStatusCode.Created, rs);

关于c# - C#对象转json字符串,如何处理双引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22293208/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com