public void Write(JsonWriter writer, Type type, object value)
 {
     Dictionary<string,object> dict = WriteJson (type,value);
     writer.Write (dict);
 }
        /// <summary>
        /// Outputs a .NET Regex as an ECMAScript RegExp literal.
        /// </summary>
        /// <param name="writer"></param>
        /// <param name="regex"></param>
        /// <param name="isGlobal"></param>
        /// <remarks>
        /// http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
        /// </remarks>
        public static void WriteEcmaScriptRegExp(JsonWriter writer, Regex regex, bool isGlobal)
        {
            if (regex == null)
            {
                writer.TextWriter.Write(JsonReader.LiteralNull);
                return;
            }

            // Regex.ToString() returns the original pattern
            string pattern = regex.ToString();
            if (String.IsNullOrEmpty(pattern))
            {
                // must output something otherwise becomes a code comment
                pattern = EcmaScriptWriter.EmptyRegExpLiteral;
            }

            string modifiers = isGlobal ? "g" : "";
            switch (regex.Options & (RegexOptions.IgnoreCase|RegexOptions.Multiline))
            {
                case RegexOptions.IgnoreCase:
                {
                    modifiers += "i";
                    break;
                }
                case RegexOptions.Multiline:
                {
                    modifiers += "m";
                    break;
                }
                case RegexOptions.IgnoreCase|RegexOptions.Multiline:
                {
                    modifiers += "im";
                    break;
                }
            }

            writer.TextWriter.Write(EcmaScriptWriter.RegExpLiteralDelim);

            int length = pattern.Length;
            int start = 0;

            for (int i = start; i < length; i++)
            {
                switch (pattern[i])
                {
                    case EcmaScriptWriter.RegExpLiteralDelim:
                    {
                        writer.TextWriter.Write(pattern.Substring(start, i - start));
                        start = i + 1;
                        writer.TextWriter.Write(EcmaScriptWriter.OperatorCharEscape);
                        writer.TextWriter.Write(pattern[i]);
                        break;
                    }
                }
            }

            writer.TextWriter.Write(pattern.Substring(start, length - start));
            writer.TextWriter.Write(EcmaScriptWriter.RegExpLiteralDelim);
            writer.TextWriter.Write(modifiers);
        }
 /// <summary>
 /// Outputs a .NET Regex as an ECMAScript RegExp literal.
 /// Defaults to global matching off.
 /// </summary>
 /// <param name="writer"></param>
 /// <param name="regex"></param>
 /// <remarks>
 /// http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
 /// </remarks>
 public static void WriteEcmaScriptRegExp(JsonWriter writer, Regex regex)
 {
     EcmaScriptWriter.WriteEcmaScriptRegExp(writer, regex, false);
 }
        public static void WriteEcmaScriptDate(JsonWriter writer, DateTime value)
        {
            if (value.Kind == DateTimeKind.Unspecified)
            {
                // unknown timezones serialize directly to become browser-local
                writer.TextWriter.Write(
                    EcmaScriptWriter.EcmaScriptDateCtor7,
                    value.Year,			// yyyy
                    value.Month-1,		// 0-11
                    value.Day,			// 1-31
                    value.Hour,			// 0-23
                    value.Minute,		// 0-60
                    value.Second,		// 0-60
                    value.Millisecond);	// 0-999
                return;
            }

            if (value.Kind == DateTimeKind.Local)
            {
                // convert server-local to UTC
                value = value.ToUniversalTime();
            }

            // find the time since Jan 1, 1970
            TimeSpan duration = value.Subtract(EcmaScriptWriter.EcmaScriptEpoch);

            // get the total milliseconds
            long ticks = (long)duration.TotalMilliseconds;

            // write out as a Date constructor
            writer.TextWriter.Write(
                EcmaScriptWriter.EcmaScriptDateCtor1,
                ticks);
        }
 void IJsonSerializable.WriteJson(JsonWriter writer)
 {
     if (String.IsNullOrEmpty(this.identifier))
     {
         writer.TextWriter.Write("null");
     }
     else
     {
         // TODO: determine if this should output parens around identifier
         writer.TextWriter.Write(this.identifier);
     }
 }
        /// <summary>
        /// A helper method for serializing an object to JSON
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        public static string Serialize(object value)
        {
            StringBuilder output = new StringBuilder();

            using (JsonWriter writer = new JsonWriter(output))
            {
                writer.Write(value);
            }

            return output.ToString();
        }