一尘不染

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

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;
}

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

我不认为这是有效的字符串,对吗?


阅读 899

收藏
2020-07-27

共1个答案

一尘不染

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

根本原因:
我的猜测是这是双重序列化问题。看来 ASP.NET Web API 2框架将为我们自动进行序列化
。这就是为什么我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。

根据我在这里的问题,我只是直接将未序列化的对象放在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);
2020-07-27