Example #1
0
    // Writer
    public static void JsonSerializer(JsonWriter writer, object instance)
    {
        var scoreEntry = (RankEntry)instance;

        writer.WriteArrayStart();
        writer.WriteNumber(scoreEntry.rankIndex);
        writer.WriteString(scoreEntry.accountId);
        writer.WriteString(scoreEntry.name);
        writer.WriteString(scoreEntry.country);
        writer.WriteNumber(scoreEntry.bestRanking);
        writer.WriteNumber(scoreEntry.totalDamage);
        writer.WriteArrayEnd();
    }
Example #2
0
    // Writer
    public static void JsonSerializer(JsonWriter writer, object instance)
    {
        var scoreEntry = (RankEntry)instance;

        writer.WriteArrayStart();
        writer.WriteNumber(scoreEntry.rankIndex);
        writer.WriteString(scoreEntry.accountId);
        writer.WriteString(scoreEntry.name);
        writer.WriteString(scoreEntry.country);
        writer.WriteNumber(scoreEntry.bestRanking);
        writer.WriteNumber(scoreEntry.totalDamage);
        writer.WriteArrayEnd();
    }
Example #3
0
        protected override void ExportValue(ExportContext context, object value, JsonWriter writer)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            if (value == null)
            {
                throw new ArgumentNullException("value");
            }

            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }

            string s;

            try
            {
                s = ConvertToString(value);
            }
            catch (InvalidCastException e)
            {
                throw new JsonException(e.Message, e);
            }

            writer.WriteNumber(s);
        }
Example #4
0
        private static void WriteTerm(JsonWriter writer, Spec.Term term)
        {
            if (term.type == Term.TermType.DATUM)
            {
                WriteDatum(writer, term.datum);
                return;
            }

            writer.BeginArray();
            writer.WriteNumber((int)term.type);
            if (term.args.Count > 0 || term.optargs.Count > 0)
            {
                writer.BeginArray();
                foreach (var arg in term.args)
                {
                    WriteTerm(writer, arg);
                }
                writer.EndArray();
                writer.BeginObject();
                foreach (var opt in term.optargs)
                {
                    writer.WriteMember(opt.key);
                    WriteTerm(writer, opt.val);
                }
                writer.EndObject();
            }
            writer.EndArray();
        }
Example #5
0
        protected override void ExportValue(ExportContext context, object value, JsonWriter writer)
        {
            Debug.Assert(context != null);
            Debug.Assert(value != null);
            Debug.Assert(writer != null);

            writer.WriteNumber(((JsonNumber) value).ToString());
        }
        protected override void ExportValue(ExportContext context, object value, JsonWriter writer)
        {
            Debug.Assert(context != null);
            Debug.Assert(value != null);
            Debug.Assert(writer != null);

            writer.WriteNumber(((JsonNumber)value).ToString());
        }
Example #7
0
        private static void WriteDatum(JsonWriter writer, Spec.Datum datum)
        {
            switch (datum.type)
            {
            case Spec.Datum.DatumType.R_BOOL:
                writer.WriteBoolean(datum.r_bool);
                break;

            case Spec.Datum.DatumType.R_JSON:
                throw new NotSupportedException();

            case Spec.Datum.DatumType.R_NULL:
                writer.WriteNull();
                break;

            case Spec.Datum.DatumType.R_NUM:
                writer.WriteNumber(datum.r_num);
                break;

            case Spec.Datum.DatumType.R_STR:
                writer.WriteString(datum.r_str);
                break;

            case Spec.Datum.DatumType.R_ARRAY:
            {
                var newterm = new Term()
                {
                    type = Term.TermType.MAKE_ARRAY
                };
                newterm.args.AddRange(datum.r_array.Select(ap => new Term()
                    {
                        type  = Term.TermType.DATUM,
                        datum = ap,
                    }));
                WriteTerm(writer, newterm);
            }
            break;

            case Spec.Datum.DatumType.R_OBJECT:
            {
                var newterm = new Term()
                {
                    type = Term.TermType.MAKE_OBJ
                };
                newterm.optargs.AddRange(datum.r_object.Select(ap => new Term.AssocPair()
                    {
                        key = ap.key,
                        val = new Term()
                        {
                            type  = Term.TermType.DATUM,
                            datum = ap.val
                        }
                    }));
                WriteTerm(writer, newterm);
            }
            break;
            }
        }
        protected override void ExportValue(object value, JsonWriter writer)
        {
            string s;

            try
            {
                s = ConvertToString(value);
            }
            catch (InvalidCastException e)
            {
                throw new JsonException(e.Message, e);
            }

            writer.WriteNumber(s);
        }
Example #9
0
 private static void WriteQuery(JsonWriter writer, Spec.Query query)
 {
     writer.BeginArray();
     writer.WriteNumber((int)query.type);
     if (query.type == Spec.Query.QueryType.START)
     {
         WriteTerm(writer, query.query);
         writer.BeginObject();
         foreach (var opt in query.global_optargs)
         {
             writer.WriteMember(opt.key);
             WriteTerm(writer, opt.val);
         }
         writer.EndObject();
     }
     writer.EndArray();
 }
Example #10
0
        protected override void ExportValue(ExportContext context, object value, JsonWriter writer)
        {
            if (context == null)
                throw new ArgumentNullException("context");
            
            if (value == null)
                throw new ArgumentNullException("value");

            if (writer == null)
                throw new ArgumentNullException("writer");
            
            string s;

            try
            {
                s = ConvertToString(value);
            }
            catch (InvalidCastException e)
            {
                throw new JsonException(e.Message, e);
            }

            writer.WriteNumber(s);
        }
Example #11
0
        protected override void ProcessRequest()
        {
            string httpMethod = Request.RequestType;

            if (!CaselessString.Equals(httpMethod, "GET") &&
                !CaselessString.Equals(httpMethod, "HEAD"))
            {
                throw new JsonRpcException(string.Format("HTTP {0} is not supported for RPC execution. Use HTTP GET or HEAD only.", httpMethod));
            }

            string callback = Mask.NullString(Request.QueryString["jsonp"]);
            bool   padded   = callback.Length > 0;

            //
            // The response type depends on whether JSONP (JSON with
            // Padding) is in effect or not.
            //

            Response.ContentType = padded ? "text/javascript" : "application/json";

            //
            // Validate that the JSONP callback method conforms to the
            // allowed syntax. If not, issue a client-side exception
            // that will certainly help to bring problem to light, even if
            // a little too aggressively.
            //

            if (padded)
            {
                if (!_jsonpex.IsMatch(callback))
                {
                    Response.Write("throw new Error('Invalid JSONP callback parameter value.');");
                    Response.End();
                }
            }

            //
            // Convert the query string into a call object.
            //

            StringWriter sw     = new StringWriter();
            JsonWriter   writer = JsonText.CreateWriter(sw);

            writer.WriteStartObject();

            writer.WriteMember("id");
            writer.WriteNumber(-1);

            writer.WriteMember("method");

            string methodName = Mask.NullString(Request.PathInfo);

            if (methodName.Length == 0)
            {
                writer.WriteNull();
            }
            else
            {
                //
                // If the method name contains periods then we replace it
                // with dashes to mean the one and same thing. This is
                // done to provide dashes as an alternative to some periods
                // since some web servers may block requests (for security
                // reasons) if a path component of the URL contains more
                // than one period.
                //

                writer.WriteString(methodName.Substring(1).Replace('-', '.'));
            }

            writer.WriteMember("params");
            NameValueCollection query = new NameValueCollection(Request.QueryString);

            query.Remove(string.Empty);
            JsonConvert.Export(Request.QueryString, writer);

            writer.WriteEndObject();

            //
            // Delegate rest of the work to JsonRpcDispatcher.
            //

            JsonRpcDispatcher dispatcher = JsonRpcDispatcherFactory.CreateDispatcher(Service);

            using (new JsonRpcDispatchScope(dispatcher, Context))
            {
                dispatcher.RequireIdempotency = true;

                if (padded)
                {
                    //
                    // For JSONP, see details here:
                    // http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/
                    //

                    Response.Write(callback);
                    Response.Write('(');
                }

                dispatcher.Process(new StringReader(sw.ToString()), Response.Output, true);

                if (padded)
                {
                    Response.Write(')');
                }
            }
        }
Example #12
0
 public override void WriteNumber(string value)
 {
     Palette.Number.Apply();
     inner.WriteNumber(value);
 }