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