// 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(); }
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); }
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(); }
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()); }
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); }
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(); }
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); }
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(')'); } } }
public override void WriteNumber(string value) { Palette.Number.Apply(); inner.WriteNumber(value); }