今天写一个Json.net比较偏门的用法,也许你很久都用不到,也许你明天就能派上用场。

我们都知道 Json.net 序列话的用法

Test test = new Test() { A = "123", B = DateTime.Now, C = DateTime.Now.AddDays(1) };
string json = JsonConvert.SerializeObject(test);

你会发现这一串的代码会生成如下的东西:

1
{"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字符串是酱紫的。。。。

很神奇吧。

这里只是提供一种思路与实现方法,具体怎么变通 还需要各位看官自己的想法。

转载自:http://www.cnblogs.com/yesehuaqingqian/p/3971392.html

最新文章

  1. [LeetCode] Combination Sum II 组合之和之二
  2. 【jquery】基础知识
  3. PDO 数据访问抽象层
  4. iOS @try
  5. 如何组织较大项目的MVC文件夹结构
  6. find_in_set mysql
  7. ural1221. Malevich Strikes Back!
  8. Hanoi Tower问题分析
  9. dapper.rainbow
  10. 【UVALive - 5131】Chips Challenge(上下界循环费用流)
  11. java Web Services搭建环境时遇到的各种问题,记录一下。 java.lang.OutOfMemoryError: PermGen space,org/apache/struts2/util/ObjectFactoryDestroyable
  12. python3、selenium、autoit3,通过flash控件上传文件
  13. Flexible 弹性盒子模型之CSS justify-content 属性
  14. apk文件分析原则
  15. 网络安全——一图看懂HTTPS建立过程
  16. ROC和AUC的区别
  17. Python+Selenium+PIL+Tesseract真正自动识别验证码进行一键登录
  18. python操作kafka(confluent_kafka 生产)
  19. tomcat安装启动之后localhost:8080页面进不去,提示错误500
  20. 移动端300ms延迟解决方法在vue 里面的一些小坑

热门文章

  1. 精通SpringBoot--分页查询功能的实现
  2. linux安装vmware出现kernel-header问题
  3. Disharmony Trees HDU - 3015
  4. Gym - 101908G Gasoline 二分+最大流
  5. Scrapy的架构与原理的理解【转】
  6. Mysql密码加密方式
  7. 50、转自知乎上android开发相见恨晚的接口
  8. ios开发学习笔记003-流程控制和类型转换
  9. Cannot set property 'innerHTML' of null 问题的解决
  10. 【LeetCode】Merge Sorted Array(合并两个有序数组)