JSON如今是很常见的处理数据的方式了。但因为本身使用的是反射获取数据,必须本身处理特殊字符,但老是发现有一些看不见的字符在前台html
var obj = jQuery.parseJSON(msg);会转换失败。数据库
例如以下在Vs中能够看到只有两个字符json

可实际上却有三个字符,使用notepad++打开ui

一直不明白这些字符是如何进入数据库的,但进入了,就必须处理,不然在前台就会转换失败,致使数据加载失败。编码
很长时间觉得是因为用户复制了一些其余编码的文字,在中文中没有对应的编码,致使的错误。此次又出现了,因而又仔细研究了一下,发现原来是ASCⅡ表中的控制字符!!spa
明白了这个处理天然就很简单了。.net
后台反射转化为JSON的代码:code
-
private
static
string getValue<T>(T t,
string pname)
where T :
class
-
-
-
PropertyInfo pinfo = type.GetProperty(pname);
-
-
-
object v = pinfo.GetValue(t,
null);
-
return v !=
null ? v.ToString() :
"";
-
-
-
-
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);
-
-
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(
',');
-
-
-
-
-
-
-
-
-
private static string String2Json(String s)
-
-
StringBuilder sb =
new StringBuilder();
-
for (
int i =
0; i < s.Length; i++)
-
-
char c = s.ToCharArray()[i];
-
-
-
-
sb.Append(
"\\\"");
break;
-
-
sb.Append(
"\\\\");
break;
-
-
sb.Append(
"\\/");
break;
-
-
sb.Append(
"\\b");
break;
-
-
sb.Append(
"\\f");
break;
-
-
sb.Append(
"\\n");
break;
-
-
sb.Append(
"\\r");
break;
-
-
sb.Append(
"\\t");
break;
-
-
if ((c >=
0 && c <=
31)||c ==
127)
-
-
-
-
-
-
-
-
-
-
-
-
控制字符
出处:https://blog.csdn.net/xuexiaodong009/article/details/38368731orm