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 == "张");
        }
Esempio n. 2
0
        /// <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);
        }
Esempio n. 3
0
        /// <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);
            }
        }
Esempio n. 4
0
        /// <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);
        }