JSON数据的处理中的特殊字符
JSON现在是很常见的处理数据的方式了。但由于自己使用的是反射获取数据,必须自己处理特殊字符,但总是发现有一些看不见的字符在前台
var obj = jQuery.parseJSON(msg);会转换失败。
例如如下在Vs中可以看到只有两个字符
可实际上却有三个字符,使用notepad++打开
一直不明白这些字符是如何进入数据库的,但进入了,就必须处理,否则在前台就会转换失败,导致数据加载失败。
很长时间以为是由于用户复制了一些其他编码的文字,在中文中没有对应的编码,导致的错误。这次又出现了,于是又仔细研究了一下,发现原来是ASCⅡ表中的控制字符!!
明白了这个处理自然就很简单了。
后台反射转化为JSON的代码:
-
private static string getValue<T>(T t, string pname) where T : class
-
{
-
Type type = t.GetType();
-
PropertyInfo pinfo = type.GetProperty(pname);
-
if (pinfo != null)
-
{
-
object v = pinfo.GetValue(t, null);
-
return v != null ? v.ToString() : "";
-
}
-
else
-
{
-
throw new Exception("不存在属性" + pname);
-
}
-
-
}
-
protected static string ConvertFromModeTojson<T>(T t, string columnInfos) where T : class
-
{
-
string[] cols = columnInfos.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
-
System.Text.StringBuilder sb = new System.Text.StringBuilder(300);
-
string result = "{";
-
foreach (string col in cols)
-
{
-
string name = "\"{0}\":\"{1}\",";
-
string value = getValue<T>(t, col);
-
value = String2Json(value);
-
sb.Append(string.Format(name, col, value));
-
-
}
-
result += sb.ToString().TrimEnd(',');
-
result += "}";
-
return result;
-
}
-
/// <summary>
-
/// 过滤特殊字符
-
/// </summary>
-
/// <param name="s"></param>
-
/// <returns></returns>
-
private static string String2Json(String s)
-
{
-
StringBuilder sb = new StringBuilder();
-
for (int i = 0; i < s.Length; i++)
-
{
-
char c = s.ToCharArray()[i];
-
switch (c)
-
{
-
case '\"':
-
sb.Append("\\\""); break;
-
case '\\':
-
sb.Append("\\\\"); break;
-
case '/':
-
sb.Append("\\/"); break;
-
case '\b':
-
sb.Append("\\b"); break;
-
case '\f':
-
sb.Append("\\f"); break;
-
case '\n':
-
sb.Append("\\n"); break;
-
case '\r':
-
sb.Append("\\r"); break;
-
case '\t':
-
sb.Append("\\t"); break;
-
default:
-
if ((c >= 0 && c <= 31)||c ==127)//在ASCⅡ码中,第0~31号及第127号(共33个)是控制字符或通讯专用字符
-
{
-
-
}
-
else
-
{
-
sb.Append(c);
-
}
-
break;
-
}
-
}
-
return sb.ToString();
-
}
控制字符
出处:https://blog.csdn.net/xuexiaodong009/article/details/38368731
关注我】。(●'◡'●)
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的【因为,我的写作热情也离不开您的肯定与支持,感谢您的阅读,我是【Jack_孟】!
本文来自博客园,作者:jack_Meng,转载请注明原文链接:https://www.cnblogs.com/mq0036/p/9411467.html
【免责声明】本文来自源于网络,如涉及版权或侵权问题,请及时联系我们,我们将第一时间删除或更改!
posted on 2018-08-03 09:00 jack_Meng 阅读(22710) 评论(0) 编辑 收藏 举报