using System;
using System.Collections.Generic;
using System.Text;
using System.Web.Script.Serialization;
using System.Text.RegularExpressions;
namespace umbraco.businesslogic.Utils
{
///
/// The built in JavaScriptSerializer does not allow you to export real JavaScript
/// objects, functions, etc... only string values which isn't always what you want.
/// See
///
/// Override the JavaScriptSerializer serialization process and look for any
/// custom "tags" strings such as a @ symbol which depicts that the string value
/// should really be a JSON value, therefore the output removes the double quotes.
///
///
///
/// If you want to output:
/// {"myFunction": function() {alert('hello');}}
/// The JavaScriptSerializer will not let you do this, it will render:
/// {"myFunction": "function() {alert('hello');}"}
/// which means that JavaScript will interpret it as a string.
/// This class allows you to output JavaScript objects, amongst other things.
///
public class JSONSerializer : JavaScriptSerializer
{
public new string Serialize(object obj)
{
string output = base.Serialize(obj);
//replaces all strings beginning with this prefix to have no double quotes
Regex regex1 = new Regex(string.Format("(\"{0}(.*?)\")+", PrefixJavaScriptObject),
RegexOptions.Multiline
| RegexOptions.CultureInvariant
| RegexOptions.Compiled
);
string result = regex1.Replace(output, "$2");
return result;
}
private const string PrefixJavaScriptObject = "@@@@";
///
/// method for a string to be converted to a json object.
///
///
/// A string formatted with a special prefix
///
/// This essentially just prefixes the string with a special key that we will use
/// to parse with later during serialization.
///
public static string ToJSONObject(string s)
{
return PrefixJavaScriptObject + s;
}
}
}