Newtonsoft.Json 自定义序列化格式转化器
2017-02-21 09:48
246 查看
public static class JsonHelper { static JsonHelper() { Newtonsoft.Json.JsonSerializerSettings setting = new Newtonsoft.Json.JsonSerializerSettings(); JsonConvert.DefaultSettings = new Func<JsonSerializerSettings>(() => { //日期类型默认格式化处理 setting.DateFormatHandling = Newtonsoft.Json.DateFormatHandling.MicrosoftDateFormat; setting.DateFormatString = "yyyy-MM-dd HH:mm:ss"; //空值处理 setting.NullValueHandling = NullValueHandling.Ignore; //高级用法九中的Bool类型转换 设置 //setting.Converters.Add(new BoolConvert("是,否")); if (setting.Converters.FirstOrDefault(p=>p.GetType()==typeof(JsonCustomDoubleConvert))==null) { setting.Converters.Add(new JsonCustomDoubleConvert(3)); } return setting; }); } public static String ToJsonStr<T>(this T obj) where T : class { if (obj == null) return string.Empty; return JsonConvert.SerializeObject(obj, Formatting.Indented); } public static T ToInstance<T>(this String jsonStr) where T : class { if (string.IsNullOrEmpty(jsonStr)) return null; try { var instance = JsonConvert.DeserializeObject<T>(jsonStr); return instance; } catch { return null; } } } /// <summary> /// 自定义数值类型序列化转换器(默认保留3位) /// </summary> public class JsonCustomDoubleConvert : CustomCreationConverter<double> { /// <summary> /// 序列化后保留小数位数 /// </summary> public virtual int Digits { get;private set; } /// <summary> /// .ctor /// </summary> public JsonCustomDoubleConvert() { this.Digits = 3; } /// <summary> /// .ctor /// </summary> /// <param name="digits">序列化后保留小数位数</param> public JsonCustomDoubleConvert(int digits) { this.Digits = digits; } /// <summary> /// 重载是否可写 /// </summary> public override bool CanWrite { get { return true; } } /// <summary> /// 重载创建方法 /// </summary> /// <param name="objectType"></param> /// <returns></returns> public override double Create(Type objectType) { return 0.0; } /// <summary> /// 重载序列化方法 /// </summary> /// <param name="writer"></param> /// <param name="value"></param> /// <param name="serializer"></param> public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { if (value == null) { writer.WriteNull(); } else { var formatter = ((double)value).ToString("N" + Digits.ToString()); writer.WriteValue(formatter); } } } /// <summary> /// 自定义数值类型序列化转换器(无小数位) /// </summary> public class JsonCustomDoubleWith0DigitsConvert : JsonCustomDoubleConvert { public override int Digits { get { return 0; } } } /// <summary> /// 自定义数值类型序列化转换器(保留1位) /// </summary> public class JsonCustomDoubleWith1DigitsConvert : JsonCustomDoubleConvert { public override int Digits { get { return 1; } } } /// <summary> /// 自定义数值类型序列化转换器(保留2位) /// </summary> public class JsonCustomDoubleWith2DigitsConvert : JsonCustomDoubleConvert { public override int Digits { get { return 2; } } } /// <summary> /// 自定义数值类型序列化转换器(保留3位) /// </summary> public class JsonCustomDoubleWith3DigitsConvert : JsonCustomDoubleConvert { public override int Digits { get { return 3; } } } /// <summary> /// 自定义数值类型序列化转换器(保留4位) /// </summary> public class JsonCustomDoubleWith4DigitsConvert : JsonCustomDoubleConvert { public override int Digits { get { return 4; } } } /// <summary> /// 自定义数值类型序列化转换器(保留5位) /// </summary> public class JsonCustomDoubleWith5DigitsConvert : JsonCustomDoubleConvert { public override int Digits { get { return 5; } } }
class Order { public int Id { get; set; } public static int OrderId = GetOrderId(); public IEnumerable<int> Missions = null; static int GetOrderId() { return new Random().Next(1, 10000); } [JsonConverter(typeof(JsonCustomDoubleWith0DigitsConvert))] public double OrderAmount { get; set; } }
相关文章推荐
- Newtonsoft.Json 序列化和反序列化 时间格式 [转]
- springMVC自定义json序列化格式,将Date格式化为字符串
- Newtonsoft.Json 序列化和反序列化 时间格式
- Newtonsoft.Json 序列化和反序列化 以及时间格式
- JSON对象反序列化为Java对象的时候自定义Date类型的字符串格式
- 通过自定义MVC的Controller的Json转换器解决日期序列化格式问题
- [转]Newtonsoft.Json 序列化和反序列化 时间格式
- springMVC自定义json序列化格式,将Date格式化为字符串
- Newtonsoft.Json 序列化和反序列化 时间格式
- Newtonsoft.Json 将C#对象转化为json格式
- Newtonsoft.Json 序列化和反序列化 时间格式
- .NET 自定义Json序列化时间格式
- Js:消息弹出框、获取时间区间、时间格式、easyui datebox 自定义校验、表单数据转化json、控制两个日期不能只填一个
- Newtonsoft.Json 序列化和反序列化 以及时间格式 2
- json格式转化 序列化 反序列化
- Newtonsoft.Json 序列化和反序列化 以及时间格式 2 高级使用
- C# 使用Newtonsoft.Json序列化自定义类型
- Newtonsoft.Json同时对多个时间字段以不同的格式序列化
- Newtonsoft.Json 自定义序列化特性
- Newtonsoft.Json对object进行json转化(时间格式的处理)