//----------------------------------------------------------------------- // Copyright (C) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------- // MicrosoftAjaxSerialization.js // Microsoft AJAX Framework Serialization. /// Type._registerScript("MicrosoftAjaxSerialization.debug.js", ["MicrosoftAjaxCore.debug.js"]); Type.registerNamespace('Sys.Serialization'); Sys.Serialization.JavaScriptSerializer = function Sys$Serialization$JavaScriptSerializer() { /// if (arguments.length !== 0) throw Error.parameterCount(); } Sys.Serialization.JavaScriptSerializer.registerClass('Sys.Serialization.JavaScriptSerializer'); Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs = []; Sys.Serialization.JavaScriptSerializer._charsToEscape = []; Sys.Serialization.JavaScriptSerializer._dateRegEx = new RegExp('(^|[^\\\\])\\"\\\\/Date\\((-?[0-9]+)(?:[a-zA-Z]|(?:\\+|-)[0-9]{4})?\\)\\\\/\\"', 'g'); Sys.Serialization.JavaScriptSerializer._escapeChars = {}; Sys.Serialization.JavaScriptSerializer._escapeRegEx = new RegExp('["\\\\\\x00-\\x1F]', 'i'); Sys.Serialization.JavaScriptSerializer._escapeRegExGlobal = new RegExp('["\\\\\\x00-\\x1F]', 'g'); Sys.Serialization.JavaScriptSerializer._jsonRegEx = new RegExp('[^,:{}\\[\\]0-9.\\-+Eaeflnr-u \\n\\r\\t]', 'g'); Sys.Serialization.JavaScriptSerializer._jsonStringRegEx = new RegExp('"(\\\\.|[^"\\\\])*"', 'g'); Sys.Serialization.JavaScriptSerializer._serverTypeFieldName = '__type'; Sys.Serialization.JavaScriptSerializer._init = function Sys$Serialization$JavaScriptSerializer$_init() { var replaceChars = ['\\u0000','\\u0001','\\u0002','\\u0003','\\u0004','\\u0005','\\u0006','\\u0007', '\\b','\\t','\\n','\\u000b','\\f','\\r','\\u000e','\\u000f','\\u0010','\\u0011', '\\u0012','\\u0013','\\u0014','\\u0015','\\u0016','\\u0017','\\u0018','\\u0019', '\\u001a','\\u001b','\\u001c','\\u001d','\\u001e','\\u001f']; Sys.Serialization.JavaScriptSerializer._charsToEscape[0] = '\\'; Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs['\\'] = new RegExp('\\\\', 'g'); Sys.Serialization.JavaScriptSerializer._escapeChars['\\'] = '\\\\'; Sys.Serialization.JavaScriptSerializer._charsToEscape[1] = '"'; Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs['"'] = new RegExp('"', 'g'); Sys.Serialization.JavaScriptSerializer._escapeChars['"'] = '\\"'; for (var i = 0; i < 32; i++) { var c = String.fromCharCode(i); Sys.Serialization.JavaScriptSerializer._charsToEscape[i+2] = c; Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs[c] = new RegExp(c, 'g'); Sys.Serialization.JavaScriptSerializer._escapeChars[c] = replaceChars[i]; } } Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder = function Sys$Serialization$JavaScriptSerializer$_serializeBooleanWithBuilder(object, stringBuilder) { stringBuilder.append(object.toString()); } Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder = function Sys$Serialization$JavaScriptSerializer$_serializeNumberWithBuilder(object, stringBuilder) { if (isFinite(object)) { stringBuilder.append(String(object)); } else { throw Error.invalidOperation(Sys.Res.cannotSerializeNonFiniteNumbers); } } Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder = function Sys$Serialization$JavaScriptSerializer$_serializeStringWithBuilder(string, stringBuilder) { stringBuilder.append('"'); if (Sys.Serialization.JavaScriptSerializer._escapeRegEx.test(string)) { if (Sys.Serialization.JavaScriptSerializer._charsToEscape.length === 0) { Sys.Serialization.JavaScriptSerializer._init(); } if (string.length < 128) { string = string.replace(Sys.Serialization.JavaScriptSerializer._escapeRegExGlobal, function(x) { return Sys.Serialization.JavaScriptSerializer._escapeChars[x]; }); } else { for (var i = 0; i < 34; i++) { var c = Sys.Serialization.JavaScriptSerializer._charsToEscape[i]; if (string.indexOf(c) !== -1) { if (Sys.Browser.agent === Sys.Browser.Opera || Sys.Browser.agent === Sys.Browser.FireFox) { string = string.split(c).join(Sys.Serialization.JavaScriptSerializer._escapeChars[c]); } else { string = string.replace(Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs[c], Sys.Serialization.JavaScriptSerializer._escapeChars[c]); } } } } } stringBuilder.append(string); stringBuilder.append('"'); } Sys.Serialization.JavaScriptSerializer._serializeWithBuilder = function Sys$Serialization$JavaScriptSerializer$_serializeWithBuilder(object, stringBuilder, sort, prevObjects) { var i; switch (typeof object) { case 'object': if (object) { if (prevObjects){ for( var j = 0; j < prevObjects.length; j++) { if (prevObjects[j] === object) { throw Error.invalidOperation(Sys.Res.cannotSerializeObjectWithCycle); } } } else { prevObjects = new Array(); } try { Array.add(prevObjects, object); if (Number.isInstanceOfType(object)){ Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder(object, stringBuilder); } else if (Boolean.isInstanceOfType(object)){ Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder(object, stringBuilder); } else if (String.isInstanceOfType(object)){ Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder(object, stringBuilder); } else if (Array.isInstanceOfType(object)) { stringBuilder.append('['); for (i = 0; i < object.length; ++i) { if (i > 0) { stringBuilder.append(','); } Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(object[i], stringBuilder,false,prevObjects); } stringBuilder.append(']'); } else { if (Date.isInstanceOfType(object)) { stringBuilder.append('"\\/Date('); stringBuilder.append(object.getTime()); stringBuilder.append(')\\/"'); break; } var properties = []; var propertyCount = 0; for (var name in object) { if (name.startsWith('$')) { continue; } if (name === Sys.Serialization.JavaScriptSerializer._serverTypeFieldName && propertyCount !== 0){ properties[propertyCount++] = properties[0]; properties[0] = name; } else{ properties[propertyCount++] = name; } } if (sort) properties.sort(); stringBuilder.append('{'); var needComma = false; for (i=0; i /// /// var e = Function._validateParams(arguments, [ {name: "object", mayBeNull: true} ]); if (e) throw e; var stringBuilder = new Sys.StringBuilder(); Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(object, stringBuilder, false); return stringBuilder.toString(); } Sys.Serialization.JavaScriptSerializer.deserialize = function Sys$Serialization$JavaScriptSerializer$deserialize(data, secure) { /// /// /// /// var e = Function._validateParams(arguments, [ {name: "data", type: String}, {name: "secure", type: Boolean, optional: true} ]); if (e) throw e; if (data.length === 0) throw Error.argument('data', Sys.Res.cannotDeserializeEmptyString); try { var exp = data.replace(Sys.Serialization.JavaScriptSerializer._dateRegEx, "$1new Date($2)"); if (secure && Sys.Serialization.JavaScriptSerializer._jsonRegEx.test( exp.replace(Sys.Serialization.JavaScriptSerializer._jsonStringRegEx, ''))) throw null; return eval('(' + exp + ')'); } catch (e) { throw Error.argument('data', Sys.Res.cannotDeserializeInvalidJson); } }