NewtonJson中转义斜杠\和多余引号的处理以及json乱码

情境:最近要写一个WebService接口提供给客户,但是数据来源是WebAPI接口(我们自己的系统),但是在WebService接口中使用WebClient来获取WebApi提供的json字符串时,发现获取的字符串出现了两个问题:1.中文乱码;2.出现了转义斜杠
字符串如下:

{\”state\":0,\"msglist\":[{\"IMTime\":\"2018-06-06  21:32:28\",\"LineName\":\"探针\",\"IMMsg\":\"收到测试任务\"},{\"IMTime\":\"2018-06-06  21:32:28\”,\”LineName\”:\”中心探针\”,\”IMMsg\":\"收到测试任务,即将开始测试!\"}]}"

任务:解决者两个问题
行动:
首先明确一点,出现了中文乱码,而json格式是正确的,百分之九十九是编码的问题
而出现了转义斜杠,则应该从以下两方面入手:
1.思考是否是网络传输导致的编码问题
2.思考是否是序列化的问题
解决问题思路:
比较webapi中序列化后得到的json字符串和webclient接收到的json字符串,看是否一样,
情况一:若一样,则肯定是序列化问题导致的;
情况二:如果传输两头的字符串不一样,则应该先采用手段将两头的字符串设置成相同,再考虑是否是序列化的问题
调试发现:属于情况二,通过webclient得到的json字符串不仅出现了中文乱码,还出现了转义斜杠。
由于考虑到中文的编码问题,遂思考从编码格式调整入手。由于是接受方的字符编码出现了问题,所以考虑调整webclient的编码,多方尝试后,调整如下:

WebClient web = new WebClient();  
web.Encoding = System.Text.Encoding.GetEncoding("GB2312");  
string result =Encoding.UTF8.GetString(web.DownloadData(ConnConfig.WebAPI + "/ImmediateTest/" + TaskName));

发现中文乱码的问题解决了,但是转义斜杠依然存在,而且由于斜杠的存在导致json的反序列化失败:
尝试使用result=result.replace(‘\’,’’)来替换字符串,发现无效,多方尝试采用如下方法:

StringBuilder sb = new StringBuilder();
string[] parts = result.Split(new char[] { ' ', '\n', '\t', '\r', '\f', '\v', '\\' }, StringSplitOptions.RemoveEmptyEntries);
int size = parts.Length;
for (int i = 0; i < size; i++)
    sb.AppendFormat("{0}", parts[i]);
result = sb.ToString();

序列化后问题完美解决

猜你喜欢

转载自blog.csdn.net/u010178308/article/details/80601929