Json.Net如何在序列化之前修改属性值
2014-09-14 19:20
423 查看
今天写一个Json.net比较偏门的用法,也许你很久都用不到,也许你明天就能派上用场。
我们都知道 Json.net 序列话的用法
你会发现这一串的代码会生成如下的东西:
这本身没有什么问题 假如你遇到一个比较扯淡的需求 如下 : 我要 B 跟C 生成的Json字符串不显示时间 我要它显示一个时间差的秒数(int 类型) 我该如何处理
之前问过许多人 都没做过这样的需求 也获得了一些建议 比如 修改生成完的字符串 又或者 在实体类里边加两个属性 显示出来
这样虽然能解决问题 但是 如果我有十个类 一百个类呢 而且每个类跟每个类的属性名称又不一样。。。想想就觉得可怕 后来果断的放弃了这种想法
我在想有没有一种方法 可以在生成Json串之前 就能把这属性的值修改掉 那岂不是会很美好。。。。啧啧啧
后来查看Json.net的源码 还真让我发现了一种方法
代码如下:
你会发现 生成的Json字符串是酱紫的。。。。
很神奇吧。
这里只是提供一种思路与实现方法,具体怎么变通 还需要各位看官自己的想法。
------------------------------------------------------Make by 夜色、花清浅
我们都知道 Json.net 序列话的用法
Test test = new Test() { A = "123", B = DateTime.Now, C = DateTime.Now.AddDays(1) }; string json = JsonConvert.SerializeObject(test);
你会发现这一串的代码会生成如下的东西:
{"A":"123","B":"2014-09-14T19:08:11.8653266+08:00","C":"2014-09-15T19:08:11.8663266+08:00"}
这本身没有什么问题 假如你遇到一个比较扯淡的需求 如下 : 我要 B 跟C 生成的Json字符串不显示时间 我要它显示一个时间差的秒数(int 类型) 我该如何处理
之前问过许多人 都没做过这样的需求 也获得了一些建议 比如 修改生成完的字符串 又或者 在实体类里边加两个属性 显示出来
这样虽然能解决问题 但是 如果我有十个类 一百个类呢 而且每个类跟每个类的属性名称又不一样。。。想想就觉得可怕 后来果断的放弃了这种想法
我在想有没有一种方法 可以在生成Json串之前 就能把这属性的值修改掉 那岂不是会很美好。。。。啧啧啧
后来查看Json.net的源码 还真让我发现了一种方法
代码如下:
class Test { public string A { get; set; } public DateTime B { get; set; } public DateTime? C { get; set; } } class Program { static void Main(string[] args) { Test test = new Test() { A = "123", B = DateTime.Now, C = DateTime.Now.AddDays(1) }; JsonConverter jc = new DateConverter(); string json = JsonConvert.SerializeObject(test, jc); Console.WriteLine(json); } } public class DateConverter : JsonConverter { public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { DateTime i = (DateTime)value; writer.WriteValue("原来我可以修改Model里DateTime类型的值"); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { throw new NotImplementedException(); } public override bool CanConvert(Type objectType) { if (objectType == typeof(DateTime)) return objectType == typeof(DateTime); else if (objectType == typeof(DateTime?)) return objectType == typeof(DateTime?); else return false; } }
你会发现 生成的Json字符串是酱紫的。。。。
很神奇吧。
这里只是提供一种思路与实现方法,具体怎么变通 还需要各位看官自己的想法。
------------------------------------------------------Make by 夜色、花清浅
相关文章推荐
- 转载自——Json.Net如何在序列化之前修改属性值
- ASP.NET如何序列化和反序列化JSON
- Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)
- ASP.NET中JSON如何对时间进行序列化和反序列化
- Json.NET 序列化JSON字符串时,如何忽略值为null的成员?
- 如何更改Json.NET的序列化规则
- FastJSON自定义序列化-修改属性值
- ASP.NET中Json序列化指定对象的部分属性值
- ASP.NET AJAX框架编程之JSON序列化剖析【转】
- 如何修改DotNetNuke Admin级别的菜单
- DotNetNuke(DNN)皮肤制作--如何修改DNN中众多的CSS文件
- 如何使用ASP.NET代码查看、修改AD用户信息
- .net下两种json序列化速度比对(已添加源代码下载地址)
- [VB.NET]求救:如何用DataGrid控件修改数据并保存于数据库中?
- [VB.NET]FastReport3,VS.net上使用,如何把修改好的格式存回数库里???
- [引]ASP.NET 移动网页 与 如何:使用仿真程序和浏览器在部署移动 Web 应用程序之前对其进行测试
- [引]ASP.NET 移动网页 与 如何:使用仿真程序和浏览器在部署移动 Web 应用程序之前对其进行测试
- (转)ASP.NET 2.0中如何动态修改Header属性如添加Meta标签
- .NET Framewok 3.5 中 JSON 序列化和反序列化的简单实现
- .net下两种json序列化速度比对