C#请求JSON接口时去除返回的JSON字符串中的转义字符

ZHUWEI
2019-06-21 10:54:25
8323 赞(1) 踩(0)

C#请求JSON接口时去除返回的JSON字符串中的转义字符,之前java的时候没有碰到类似的问题,使用C#的时候就碰到查了半天,终于找到解决办法,费了不少时间,颇为蛋疼

之前java的时候没有碰到类似的问题,使用C#的时候就碰到查了半天,终于找到解决办法,费了不少时间,颇为蛋疼

C#通过HTTP接口时,返回json字符串格式是这样的:

"\"{\\\"code\\\":0,\\\"message\\\":\\\"\\\",\\\"userId\\\":1,\\\"loginName\\\":\\\"admin\\\",\\\"userName\\\":\\\"张三\\\",\\\"terminalId\\\":2,\\\"terminalName\\\":\\\" \\\"}\""

就问蛋疼不疼?好多的反斜杠转义字符

代码是这样的

/// <summary>
        /// 获取请求的数据
        /// </summary>
        public static string GetResponseString(HttpWebResponse webResponse)
        {
            using (Stream s = webResponse.GetResponseStream())
            {
                StreamReader reader = new StreamReader(s, Encoding.UTF8);
                string resp = reader.ReadToEnd();
                reader.Close();
                return resp;
            }
        }

然后开始解决:

一开始使用 Regex.Unescape(resp); 直接去除转义字符,

结果是否定的,仍旧在JObject respJson = JsonConvert.DeserializeObject<JObject>(resp); 转换时转义字符引起报错出异常,无法正常转换

最终解决使用Newtonsoft.Json.dll 中的方法,重新处理字符串:

public static string GetResponseStringJson(HttpWebResponse webResponse)
        {
            using (Stream s = webResponse.GetResponseStream())
            {
                StreamReader reader = new StreamReader(s, Encoding.UTF8);
                string resp = reader.ReadToEnd();//Regex.Unescape(resp);

                JsonReader readerJson = new JsonTextReader(new StringReader(resp)); //针对转义字符特殊处理
                while (readerJson.Read())
                {
                    resp = readerJson.Value.ToString();
                }
                readerJson.Close();
                reader.Close();
                return resp;
            }
        }

增加绿色标记这一段代码,问题彻底解决,这下蛋也不疼了



↑TOP