Пример #1
0
        /// <summary>
        /// 将对象序列化成缩进结构的JSON,便于日志记录
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static string ToDumpJson(this object obj)
        {
            if (obj == null)
            {
                return("null");
            }

            DefaultJsonSerializer  serializer = ObjectFactory.New <DefaultJsonSerializer>();
            JsonSerializerSettings settings   = serializer.GetJsonSerializerSettings(true);

            // 设置为缩进格式
            settings.Formatting = Formatting.Indented;
            return(serializer.Serialize(obj, settings));
        }
Пример #2
0
        private object[] GetMultiObjectsFormString(string input, ActionDescription action, HttpContext context)
        {
            JObject jsonObj = JObject.Parse(input);

            DefaultJsonSerializer  jsonnet  = new DefaultJsonSerializer();
            JsonSerializerSettings settings = jsonnet.GetJsonSerializerSettings(false);

            Newtonsoft.Json.JsonSerializer jsonSerializer
                = Newtonsoft.Json.JsonSerializer.CreateDefault(settings);


            object[] parameters = new object[action.Parameters.Length];

            for (int i = 0; i < parameters.Length; i++)
            {
                FromBodyAttribute bodyAttr = action.Parameters[i].GetMyAttribute <FromBodyAttribute>(false);
                if (bodyAttr != null)
                {
                    // 当前参数需要从整体请求体中反序列化得到参数值
                    parameters[i] = GetObjectFromString(input, action);
                }
                else
                {
                    //尝试从JSON中获取一个片段,用这个片段来构造参数值
                    JToken childObj = jsonObj.GetValue(action.Parameters[i].Name, StringComparison.OrdinalIgnoreCase);
                    if (childObj != null)
                    {
                        Type pType = action.Parameters[i].ParameterType;
                        parameters[i] = childObj.ToObject(pType, jsonSerializer);
                    }
                    else
                    {
                        // 再次尝试从HTTP上下文中获取
                        parameters[i] = GetParameterFromHttp(context, action.Parameters[i]);
                    }
                }
            }

            return(parameters);
        }