/// <inheriteddoc /> protected sealed override void OnProcessRequest(IHttpRequest request) { dynamic result = CreateResultObject(code: 0); try { this.OnProcessJsonRequest(request, ref result); } catch (Exception ex) { result = CreateResultObject(code: -1, msg: (ex.GetBaseException() ?? ex).Message, data: CreateErrorJsonObject(ex)); } // write to output var resultContent = ""; try { if (result != null) { var serializer = new JsonSerializer(); using (var strWriter = new StringWriter()) { using (var jsonWriter = new JsonTextWriter(strWriter)) { serializer.Serialize(jsonWriter, result); resultContent = strWriter.ToString(); } } } request.Response.ContentType = string.Format("application/json; charset={0}", this.Charset.WebName); request.AddResponseHeader("Content-Length", resultContent.Length); request.Write(this.Charset .GetBytes(resultContent)); } finally { resultContent = null; } }