示例#1
0
        public IHtmlContent Serialize(object value)
        {
            JsonSerializeOption option = null;

            if (value is JsonResultWrapper wrapper)
            {
                option = wrapper.Option;
            }
            else
            {
                var hosting = context.RequestServices.GetService(typeof(JsonSerializeOptionHosting)) as JsonSerializeOptionHosting;
                if (hosting != null)
                {
                    option = hosting.Option;
                }
            }

            if (option == null)
            {
                option = mvcOptions.JsonSerializeOption;
            }
            else
            {
                option.Reference(mvcOptions.JsonSerializeOption);
            }

            var serializer = new JsonSerializer(option);

            var json = serializer.Serialize(value);

            return(new HtmlString(json));
        }
示例#2
0
        public override Task WriteResponseBodyAsync(OutputFormatterWriteContext context, Encoding selectedEncoding)
        {
            var response = context.HttpContext.Response;

            using (var writer = context.WriterFactory(response.Body, selectedEncoding))
            {
                JsonSerializeOption option = null;
                if (context.Object is JsonResultWrapper wrapper)
                {
                    option = wrapper.Option;
                }

                var hosting = context.HttpContext.RequestServices.GetService <JsonSerializeOptionHosting>();
                if (hosting != null)
                {
                    option = hosting.Option;
                }

                option = option ?? mvcOptions.JsonSerializeOption;
                var serializer = new JsonSerializer(option);

                using (var jsonWriter = new JsonWriter(writer))
                {
                    serializer.Serialize(context.Object, jsonWriter);
                }
            }

            return(Task.CompletedTask);
        }
        public override Task WriteResponseBodyAsync(OutputFormatterWriteContext context, Encoding selectedEncoding)
        {
            var response = context.HttpContext.Response;

            using (var writer = context.WriterFactory(response.Body, selectedEncoding))
            {
                JsonSerializeOption option = null;
                if (context.Object is JsonResultWrapper wrapper)
                {
                    option = wrapper.Option;
                }

                option = option ?? new JsonSerializeOption();

                var globalconverters = GlobalSetting.Converters.Where(s => s is JsonConverter).Cast <JsonConverter>();
                option.Converters.AddRange(globalconverters);

                var serializer = new JsonSerializer(option);
                using (var jsonWriter = new JsonWriter(writer))
                {
                    serializer.Serialize(context.Object, jsonWriter);
                }
            }

            return(Task.CompletedTask);
        }
示例#4
0
        /// <summary>
        /// 将数据序列化为 Json 字符串。这里使用了 Fireasy 提供的 Json 序列化方法。
        /// </summary>
        /// <param name="context"></param>
        /// <param name="data">要序列化的数据。</param>
        /// <returns></returns>
        protected virtual string SerializeJson(ControllerContext context, object data)
        {
            var option = new JsonSerializeOption();

            var globalconverters = GlobalSetting.Converters.Where(s => s is JsonConverter).Cast <JsonConverter>();

            option.Converters.AddRange(globalconverters);

            if (ActionContext.Current != null)
            {
                var scopeConverters = ActionContext.Current.Converters.Where(s => s is JsonConverter).Cast <JsonConverter>();
                option.Converters.AddRange(scopeConverters);
            }

            //jsonp的处理
            var jsoncallback = context.HttpContext.Request.Params["callback"];

            var serializer = new JsonSerializer(option);
            var json       = serializer.Serialize(data);

            if (!string.IsNullOrEmpty(jsoncallback))
            {
                return(string.Format("{0}({1})", jsoncallback, json));
            }

            return(json);
        }
示例#5
0
        private void SaveTemplate(string root)
        {
            var option = new JsonSerializeOption {
                Indent = true
            };

            option.Converters.Add(new PartLoopConverter());
            var json    = new JsonSerializer(option);
            var content = json.Serialize(Template);

            var path = Path.Combine(StaticUnity.TemplateProvider.WorkDir, Template.Id + ".template");

            File.WriteAllText(path, content, Encoding.Default);

            if (!Directory.Exists(root))
            {
                Directory.CreateDirectory(root);
            }

            foreach (var part in Template.Partitions)
            {
                if (!File.Exists(part.FilePath))
                {
                    File.WriteAllText(part.FilePath, string.Empty, Encoding.Default);
                }
            }
        }
示例#6
0
        public ObjectSerializer()
        {
            var option = new JsonSerializeOption();

            option.Converters.Add(new FullDateTimeJsonConverter());
            serializer = new JsonSerializer(option);
        }
示例#7
0
        private ISerializer GetSerializer()
        {
            return(SingletonLocker.Lock(ref _serializerFactory, this, () =>
            {
                return new Func <ISerializer>(() =>
                {
                    ISerializer _serializer = null;
                    if (Setting.SerializerType != null)
                    {
                        _serializer = Setting.SerializerType.New <ISerializer>();
                    }

                    if (_serializer == null)
                    {
                        _serializer = ServiceProvider.TryGetService(() => SerializerFactory.CreateSerializer());
                    }

                    if (_serializer == null)
                    {
                        var option = new JsonSerializeOption();
                        option.Converters.Add(new FullDateTimeJsonConverter());
                        _serializer = new JsonSerializer(option);
                    }

                    return _serializer;
                });
            })());
        }
示例#8
0
        /// <summary>
        /// 包装 <see cref="JsonResult"/>,以便能够使用 <see cref="JsonConverter"/> 来转换需要的数据格式。
        /// </summary>
        /// <param name="controller">控制器对象。</param>
        /// <param name="value">输出的对象值。</param>
        /// <param name="converters">一组 Json 序列化转换器对象。</param>
        /// <returns></returns>
        public static JsonResult Json(this Controller controller, object value, params JsonConverter[] converters)
        {
            var option = new JsonSerializeOption();

            option.Converters.AddRange(converters);

            return(new JsonResultWrapper(value, option));
        }
示例#9
0
        /// <summary>
        /// 序列化对象。
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <returns></returns>
        public virtual string Serialize <T>(T obj)
        {
            var option = new JsonSerializeOption();

            option.Converters.Add(new FullDateTimeJsonConverter());
            var serializer = new JsonSerializer(option);

            return(serializer.Serialize(obj));
        }
示例#10
0
        /// <summary>
        /// 反序列化。
        /// </summary>
        /// <param name="type"></param>
        /// <param name="str"></param>
        /// <returns></returns>
        public virtual object Deserialize(Type type, string str)
        {
            var option = new JsonSerializeOption();

            option.Converters.Add(new FullDateTimeJsonConverter());
            var serializer = new JsonSerializer(option);

            return(serializer.Deserialize(str, type));
        }
示例#11
0
        /// <summary>
        /// 反序列化。
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="str"></param>
        /// <returns></returns>
        public virtual T Deserialize <T>(string str)
        {
            var option = new JsonSerializeOption();

            option.Converters.Add(new FullDateTimeJsonConverter());
            var serializer = new JsonSerializer(option);

            return(serializer.Deserialize <T>(str));
        }
示例#12
0
        /// <summary>
        /// 反序列化。
        /// </summary>
        /// <param name="type"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        public virtual object Deserialize(Type type, byte[] data)
        {
            var option = new JsonSerializeOption();

            option.Converters.Add(new FullDateTimeJsonConverter());
            var serializer = new JsonSerializer(option);

            return(serializer.Deserialize(Encoding.UTF8.GetString(data), type));
        }
示例#13
0
        /// <summary>
        /// 从文本中解析出 <see cref="InvokeMessage"/> 对象。
        /// </summary>
        /// <param name="content"></param>
        /// <returns></returns>
        public virtual InvokeMessage ResolveMessage(string content)
        {
            var option = new JsonSerializeOption();

            option.Converters.Add(new FullDateTimeJsonConverter());
            var serializer = new JsonSerializer(option);

            return(serializer.Deserialize <InvokeMessage>(content));
        }
示例#14
0
        /// <summary>
        /// 序列化对象。
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <returns></returns>
        public virtual byte[] Serialize <T>(T obj)
        {
            var option = new JsonSerializeOption();

            option.Converters.Add(new FullDateTimeJsonConverter());
            var serializer = new JsonSerializer(option);

            return(Encoding.UTF8.GetBytes(serializer.Serialize(obj)));
        }
示例#15
0
        /// <summary>
        /// 格式化 <see cref="InvokeMessage"/> 对象为传输的文本。
        /// </summary>
        /// <param name="message"></param>
        /// <returns></returns>
        public virtual string FormatMessage(InvokeMessage message)
        {
            var option = new JsonSerializeOption();

            option.Converters.Add(new FullDateTimeJsonConverter());
            var serializer = new JsonSerializer(option);

            return(serializer.Serialize(message));
        }
示例#16
0
        public override Task ExecuteAsync(ActionContext context, JsonResult result)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            if (result == null)
            {
                throw new ArgumentNullException(nameof(result));
            }

            var response = context.HttpContext.Response;

            ResponseContentTypeHelper.ResolveContentTypeAndEncoding(
                result.ContentType,
                response.ContentType,
                DefaultContentType,
                out var resolvedContentType,
                out var resolvedContentTypeEncoding);

            response.ContentType = resolvedContentType;

            if (result.Value != null)
            {
                JsonSerializeOption option = null;
                if (result is JsonResultWrapper wrapper)
                {
                    option = wrapper.Option;
                }
                else
                {
                    var hosting = context.HttpContext.RequestServices.GetService <JsonSerializeOptionHosting>();
                    if (hosting != null)
                    {
                        option = hosting.Option;
                    }
                }

                if (option == null)
                {
                    option = mvcOptions.JsonSerializeOption;
                }
                else
                {
                    option.Reference(mvcOptions.JsonSerializeOption);
                }

                var serializer = new JsonSerializer(option);

                var content = serializer.Serialize(result.Value);
                response.Body.WriteAsync(resolvedContentTypeEncoding.GetBytes(content));
            }

            return(Task.CompletedTask);
        }
        /// <summary>
        /// 获取参数的值。
        /// </summary>
        /// <param name="controllerContext"></param>
        /// <param name="parameterDescriptor"></param>
        /// <returns></returns>
        protected override object GetParameterValue(ControllerContext controllerContext, ParameterDescriptor parameterDescriptor)
        {
            var type = parameterDescriptor.ParameterType.GetNonNullableType();

            if (type.IsPrimitive || type.IsEnum || type == typeof(string))
            {
                var value = controllerContext.HttpContext.Request.Params[parameterDescriptor.ParameterName];
                if (value == "null")
                {
                    return(null);
                }

                return(base.GetParameterValue(controllerContext, parameterDescriptor));
            }
            else
            {
                //对json进行反序列化,由于使用了基于 Fireasy AOP 的实体模型,所以必须使用 Fireasy 的反序列化方法
                var json = controllerContext.HttpContext.Request.Params[parameterDescriptor.ParameterName];
                if (!string.IsNullOrEmpty(json))
                {
                    try
                    {
                        var option = new JsonSerializeOption();

                        var globalconverters = GlobalSetting.Converters.Where(s => s is JsonConverter).Cast <JsonConverter>();
                        option.Converters.AddRange(globalconverters);

                        var serializer = ContainerUnity.GetContainer().TryGetService <ISerializer>(() => new JsonSerializer(option));
                        if (serializer is ITextSerializer txtSerializer)
                        {
                            return(txtSerializer.Deserialize(json, parameterDescriptor.ParameterType));
                        }
                        else
                        {
                            return(serializer.Deserialize(Encoding.UTF8.GetBytes(json), parameterDescriptor.ParameterType));
                        }
                    }
                    catch (Exception exp)
                    {
                        var logger = LoggerFactory.CreateLogger();
                        if (logger != null)
                        {
                            var message = string.Format("无法解析控制器 {0} 的方法 {1} 的参数 {2} 的值。\n\n数据为: {3}",
                                                        parameterDescriptor.ActionDescriptor.ControllerDescriptor.ControllerName,
                                                        parameterDescriptor.ActionDescriptor.ActionName,
                                                        parameterDescriptor.ParameterName,
                                                        json);

                            logger.Error(message, exp);
                        }
                    }
                }

                return(null);
            }
        }
示例#18
0
        private void SaveDataSources()
        {
            var option = new JsonSerializeOption {
                Indent = true
            };
            var json    = new JsonSerializer(option);
            var content = json.Serialize(sources);

            File.WriteAllText(sourceFileName, content, Encoding.Default);
        }
示例#19
0
        public static void SaveFile(Profile profile, string fileName)
        {
            var option = new JsonSerializeOption {
                Indent = true
            };
            var json    = new JsonSerializer(option);
            var content = json.Serialize(profile);

            File.WriteAllText(fileName, content, Encoding.Default);
        }
示例#20
0
        public static void Save()
        {
            var option = new JsonSerializeOption {
                Indent = true
            };
            var json    = new JsonSerializer(option);
            var path    = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "config", "app.cfg");
            var content = json.Serialize(Config.Instance);

            File.WriteAllText(path, content, Encoding.Default);
        }
示例#21
0
        /// <summary>
        /// 初始化 <see cref="JsonResultWrapper"/> 类的新实例。
        /// </summary>
        /// <param name="value"></param>
        /// <param name="option"></param>
        public JsonResultWrapper(object value, JsonSerializeOption option = null)
#if NETCOREAPP
            : base(value)
#endif
        {
#if !NETCOREAPP
            result = new JsonResult {
                Data = value, JsonRequestBehavior = JsonRequestBehavior.AllowGet
            };
#endif
            Option = option;
        }
示例#22
0
        public override Task ExecuteAsync(ActionContext context, JsonResult result)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            if (result == null)
            {
                throw new ArgumentNullException(nameof(result));
            }

            var response = context.HttpContext.Response;

            ResponseContentTypeHelper.ResolveContentTypeAndEncoding(
                result.ContentType,
                response.ContentType,
                DefaultContentType,
                out var resolvedContentType,
                out var resolvedContentTypeEncoding);

            response.ContentType = resolvedContentType;

            if (result.Value != null)
            {
                using (var writer = WriterFactory.CreateWriter(response.Body, resolvedContentTypeEncoding))
                {
                    JsonSerializeOption option = null;
                    if (result is JsonResultWrapper wrapper)
                    {
                        option = wrapper.Option;
                    }

                    var hosting = context.HttpContext.RequestServices.GetService <JsonSerializeOptionHosting>();
                    if (hosting != null)
                    {
                        option = hosting.Option;
                    }

                    option = option ?? mvcOptions.JsonSerializeOption;
                    var serializer = new JsonSerializer(option);

                    using (var jsonWriter = new JsonWriter(writer))
                    {
                        serializer.Serialize(result.Value, jsonWriter);
                    }
                }
            }

            return(Task.CompletedTask);
        }
示例#23
0
        /// <summary>
        /// 获取参数的值。
        /// </summary>
        /// <param name="controllerContext"></param>
        /// <param name="parameterDescriptor"></param>
        /// <returns></returns>
        protected override object GetParameterValue(ControllerContext controllerContext, ParameterDescriptor parameterDescriptor)
        {
            if (IsSystemType(parameterDescriptor.ParameterType))
            {
                var value = controllerContext.HttpContext.Request.Params[parameterDescriptor.ParameterName];
                if (value == "null")
                {
                    return(null);
                }

                return(base.GetParameterValue(controllerContext, parameterDescriptor));
            }
            else
            {
                //对json进行反序列化,由于使用了基于 Fireasy AOP 的实体模型,所以必须使用 Fireasy 的反序列化方法
                var json = controllerContext.HttpContext.Request.Params[parameterDescriptor.ParameterName];
                if (!string.IsNullOrEmpty(json))
                {
                    try
                    {
                        var option = new JsonSerializeOption();
                        if (ActionContext.Current != null)
                        {
                            //json转换器
                            var converters = ActionContext.Current.Converters.Where(s => s is JsonConverter).Cast <JsonConverter>();
                            option.Converters.AddRange(converters);
                        }

                        var serializer = new JsonSerializer(option);
                        return(serializer.Deserialize(json, parameterDescriptor.ParameterType));
                    }
                    catch (Exception exp)
                    {
                        var logger = LoggerFactory.CreateLogger();
                        if (logger != null)
                        {
                            var message = string.Format("无法解析控制器 {0} 的方法 {1} 的参数 {2} 的值。\n\n数据为: {3}",
                                                        parameterDescriptor.ActionDescriptor.ControllerDescriptor.ControllerName,
                                                        parameterDescriptor.ActionDescriptor.ActionName,
                                                        parameterDescriptor.ParameterName,
                                                        json);

                            logger.Error(message, exp);
                        }
                    }
                }

                return(null);
            }
        }
示例#24
0
        async Task IClientProxy.SendAsync(string method, params object[] arguments)
        {
            var option = new JsonSerializeOption()
            {
                Indent = false
            };
            var serializer = new JsonSerializer(option);

            var message = new InvokeMessage(method, 0, arguments);
            var json    = serializer.Serialize(message);
            var bytes   = Encoding.UTF8.GetBytes(json);

            await acceptContext.WebSocket.SendAsync(new ArraySegment <byte>(bytes, 0, bytes.Length), WebSocketMessageType.Text, true, CancellationToken.None);
        }
示例#25
0
        /// <summary>
        /// 对 <paramref name="settings"/> 对象进行序列化。
        /// </summary>
        /// <param name="settings"></param>
        /// <returns></returns>
        public static string Serialize(SettingsBase settings)
        {
            if (settings == null)
            {
                return(string.Empty);
            }

            var option = new JsonSerializeOption {
                Format = JsonFormat.Object
            };
            var json = new JsonSerializer(option);

            json.Option.Converters.Add(new StringConverter());
            return(json.Serialize(settings));
        }
示例#26
0
        /// <summary>
        /// 对 <paramref name="settings"/> 对象进行序列化。
        /// </summary>
        /// <param name="settings"></param>
        /// <returns></returns>
        public static string Serialize(SettingsBase settings)
        {
            if (settings == null)
            {
                return(string.Empty);
            }

            var option = new JsonSerializeOption {
                KeyHandling = JsonKeyHandling.None
            };
            var json = new JsonSerializer(option);

            json.Option.Converters.Add(new StringConverter());
            return(json.Serialize(settings));
        }
示例#27
0
        public override Task ExecuteAsync(Microsoft.AspNetCore.Mvc.ActionContext context, JsonResult result)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            if (result == null)
            {
                throw new ArgumentNullException("result");
            }

            var response = context.HttpContext.Response;

            ResponseContentTypeHelper.ResolveContentTypeAndEncoding(
                result.ContentType,
                response.ContentType,
                DefaultContentType,
                out var resolvedContentType,
                out var resolvedContentTypeEncoding);

            response.ContentType = resolvedContentType;

            if (result.Value != null)
            {
                using (var writer = WriterFactory.CreateWriter(response.Body, resolvedContentTypeEncoding))
                {
                    JsonSerializeOption option = null;
                    if (result is JsonResultWrapper wrapper)
                    {
                        option = wrapper.Option;
                    }

                    option = option ?? new JsonSerializeOption();

                    var globalconverters = GlobalSetting.Converters.Where(s => s is JsonConverter).Cast <JsonConverter>();
                    option.Converters.AddRange(globalconverters);

                    var serializer = new JsonSerializer(option);
                    using (var jsonWriter = new JsonWriter(writer))
                    {
                        serializer.Serialize(result.Value, jsonWriter);
                    }
                }
            }

            return(Task.CompletedTask);
        }
示例#28
0
        /// <summary>
        /// Json 序列化。
        /// </summary>
        /// <param name="serviceContext">上下文对象。</param>
        /// <param name="value">要输出的值。</param>
        /// <returns></returns>
        protected virtual string JsonSerialize(ServiceContext serviceContext, object value)
        {
            var jsoncallback = serviceContext.HttpContext.Request.Params["callback"];

            var converters = serviceContext.Converters.Where(s => s is JsonConverter).Cast <JsonConverter>();
            var option     = new JsonSerializeOption();

            option.Converters.AddRange(converters);
            var json = new JsonSerializer(option).Serialize(value);

            if (!string.IsNullOrEmpty(jsoncallback))
            {
                return(string.Format("{0}({1})", jsoncallback, json));
            }

            return(json);
        }
示例#29
0
        public Task BindModelAsync(ModelBindingContext bindingContext)
        {
            var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);

            if (value == ValueProviderResult.None)
            {
                return(Task.CompletedTask);
            }

            var modelState = bindingContext.ModelState;

            modelState.SetModelValue(bindingContext.ModelName, value);

            var option = new JsonSerializeOption();

            var globalconverters = GlobalSetting.Converters.Where(s => s is JsonConverter).Cast <JsonConverter>();

            option.Converters.AddRange(globalconverters);

            var serializer = new JsonSerializer(option);

            try
            {
                var json = serializer.Deserialize(value.FirstValue, bindingContext.ModelType);
                bindingContext.Result = ModelBindingResult.Success(json);
            }
            catch (Exception exp)
            {
                var logger = LoggerFactory.CreateLogger();
                if (logger != null)
                {
                    var message = string.Format("无法解析控制器 {0} 的方法 {1} 的参数 {2} 的值。\n\n数据为: {3}",
                                                bindingContext.ActionContext.RouteData.Values["controller"],
                                                bindingContext.ActionContext.RouteData.Values["action"],
                                                bindingContext.ModelName,
                                                value.FirstValue);

                    logger.Error(message, exp);
                }

                bindingContext.Result = ModelBindingResult.Failed();
            }

            return(Task.CompletedTask);
        }
示例#30
0
        public override Task WriteResponseBodyAsync(OutputFormatterWriteContext context, Encoding selectedEncoding)
        {
            var response        = context.HttpContext.Response;
            var serviceProvider = context.HttpContext.RequestServices;

            JsonSerializeOption option = null;

            if (context.Object is JsonResultWrapper wrapper)
            {
                option = wrapper.Option;
            }
            else
            {
                var hosting = context.HttpContext.RequestServices.GetService <JsonSerializeOptionHosting>();
                if (hosting != null)
                {
                    option = hosting.Option;
                }
            }

            if (option == null)
            {
                option = _mvcOptions.JsonSerializeOption;
            }
            else
            {
                option.Reference(_mvcOptions.JsonSerializeOption);
            }

            var serializer = serviceProvider.TryGetService <ISerializer>(() => new JsonSerializer(option));

            if (serializer is ITextSerializer txtSerializer)
            {
                var content = txtSerializer.Serialize(context.Object);
                response.Body.WriteAsync(selectedEncoding.GetBytes(content));
            }
            else
            {
                response.Body.WriteAsync(serializer.Serialize(context.Object));
            }

            return(Task.CompletedTask);
        }