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)); }
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); }
/// <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); }
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); } } }
public ObjectSerializer() { var option = new JsonSerializeOption(); option.Converters.Add(new FullDateTimeJsonConverter()); serializer = new JsonSerializer(option); }
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; }); })()); }
/// <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)); }
/// <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)); }
/// <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)); }
/// <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)); }
/// <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)); }
/// <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)); }
/// <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))); }
/// <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)); }
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); } }
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); }
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); }
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); }
/// <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; }
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); }
/// <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); } }
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); }
/// <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)); }
/// <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)); }
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); }
/// <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); }
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); }
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); }