刚开始工作的时候,需要把前台的复杂json对象(带嵌套)传递到后台c#的controller,用的此方法比较实用,当然在MVC4的apicontroller中貌似就用不到了,之后再总结吧。
function ToSerialize (obj) { var ransferCharForJavascript = function (s) { var newStr = s.replace( /[\x26\x27\x3C\x3E\x0D\x0A\x22\x2C\x5C\x00]/g, function (c) { ascii = c.charCodeAt(0) return '\\u00' + (ascii < 16 ? '0' + ascii.toString(16) : ascii.toString(16)) } ); return newStr; } if (obj == null) { return null } else if (obj.constructor == Array) { var builder = []; builder.push("["); for (var index in obj) { if (typeof obj[index] == "function") continue; if (index > 0) builder.push(","); builder.push(ToSerialize(obj[index])); } builder.push("]"); return builder.join(""); } else if (obj.constructor == Object) { var builder = []; builder.push("{"); var index = 0; for (var key in obj) { if (typeof obj[key] == "function") continue; if (index > 0) builder.push(","); builder.push(FormatString("\"{0}\":{1}", key, ToSerialize(obj[key]))); index++; } builder.push("}"); return builder.join(""); } else if (obj.constructor == Boolean) { return obj.toString(); } else if (obj.constructor == Number) { return obj.toString(); } else if (obj.constructor == String) { return FormatString('"{0}"', ransferCharForJavascript(obj)); } else if (obj.constructor == Date) { return "'" + obj.formatDate("US", "") + "'"; //FormatString('{"__DataType":"Date","__thisue":{0}}', obj.getTime() - (new Date(1970, 0, 1, 0, 0, 0)).getTime()); } else if (this.toString != undefined) { return ToSerialize(obj); } } function FormatString(str){ var i = 1, args = arguments; var str = args[0]; var re = /\{(\d+)\}/g; return str.replace(re, function () { return args[i++] }); }
何时结束黑梦,迎接艳阳天?