public void DeserializeTest() { var model = new { flag = "test", datas = new[] { new { age = "10", name = "张" }, new { age = "11", name = "陈" } } }; var serializer = new DefaultDynamicJsonSerializer(); var json = serializer.Serialize(model); var jObject = new DefaultDynamicJsonSerializer().Deserialize(json); Assert.IsTrue(jObject.Flag == "test"); var datas = jObject.Datas as IList; Assert.IsTrue(datas != null && datas.Count == 2); var user = (User)jObject.Datas[0]; Assert.IsTrue(user != null && user.Name == "张"); }
/// <summary> /// 执行结果 /// </summary> /// <param name="context">上下文</param> public override void ExecuteResult(RequestContext context) { var json = new DefaultDynamicJsonSerializer().Serialize(this.data); context.Response.ContentType = "application/json"; context.Response.Write(json); }
/// <summary> /// 执行结果 /// </summary> /// <param name="context">上下文</param> public override void ExecuteResult(RequestContext context) { var callback = context.Request["callback"]; var json = new DefaultDynamicJsonSerializer().Serialize(this.Data); var gzip = context.Request.IsAcceptGZip(); if (callback == null) { context.Response.ContentType = "application/json"; context.Response.WriteResponse(json, gzip); } else { var jsonP = string.Format("{0}({1})", callback, json); context.Response.WriteResponse(jsonP, gzip); } }
/// <summary> /// 将请求的body转换为参数模型 /// </summary> /// <param name="request">请求</param> /// <param name="parameter">参数</param> /// <param name="chartset">编码</param> /// <returns></returns> private object GenerateModelFromBody(HttpRequest request, ApiParameter parameter, Encoding chartset) { var json = chartset.GetString(request.Body); var body = new DefaultDynamicJsonSerializer().Deserialize(json, typeof(object)); if (body != null) { return(Converter.Cast(body, parameter.Type)); } var defaultValue = parameter.Info.DefaultValue; if (defaultValue == DBNull.Value) { defaultValue = null; } return(defaultValue); }
/// <summary> /// 生成和绑定所有参数的值 /// Raw Json /// </summary> /// <param name="context">上下文</param> /// <param name="chartset">字符编码</param> private void BindParametersFromRawJson(ActionContext context, Encoding chartset) { if (context.Action.Parameters.Length == 0) { return; } var json = chartset.GetString(context.Request.Body); var body = new DefaultDynamicJsonSerializer().Deserialize(json, typeof(object)); var bodyLazy = new Lazy <IDictionary <string, object> >(() => { var dic = body as IDictionary <string, object>; if (dic != null) { dic = dic.ToDictionary(kv => kv.Key, kv => kv.Value, StringComparer.OrdinalIgnoreCase); } return(dic); }); this.BindParametersFromRawJson(context, body, bodyLazy); }