今天写一个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

转载自——Json.Net如何在序列化之前修改属性值的更多相关文章

  1. JSON字符串反序列化成对象_部分属性值反序列化失败

    简介:本人在开发webapi接口时遇到了:一个复杂的Json字符串在反序列化为对象时报,无法发序列化其中的一个属性对象? 使用方法: InternalRecommendRequestFormModel ...

  2. 前台jquery+ajax+json传值,后台处理完后返回json字符串,如何取里面的属性值?(不用springmvc注解)

    一.取属性值 前台页面: function select(id){ alert("hfdfhdfh"+id); $.ajax({ url:"selectByid.jsp& ...

  3. dhtmlxtree 如何得到xml,json等文件中的自定义的属性值

    先看代码: var TreeForJSON = new dhtmlXTreeObject('TreeForJSON', '100%', '100%', 0); TreeForJSON.setImage ...

  4. c# json 序列化如何去掉null值

    要将一个对象序列化,可是如果对象的属性为null的时候,我们想将属性为null的都去掉. 在这里我使用Newtonsoft.Json.dll 记录一下序列化以及反序列化 json字符串转对象 Mode ...

  5. c#实例化继承类,必须对被继承类的程序集做引用 .net core Redis分布式缓存客户端实现逻辑分析及示例demo 数据库笔记之索引和事务 centos 7下安装python 3.6笔记 你大波哥~ C#开源框架(转载) JSON C# Class Generator ---由json字符串生成C#实体类的工具

    c#实例化继承类,必须对被继承类的程序集做引用   0x00 问题 类型“Model.NewModel”在未被引用的程序集中定义.必须添加对程序集“Model, Version=1.0.0.0, Cu ...

  6. JSON与js对象序列化

    JavaScript对象表示法(JavaScript Object Notation,简称JSON)是一种轻量级的数据交换格式,它基于js字面量表示法,是js的一个子集.虽然是一个js的子集但是他与语 ...

  7. Json.Net学习.集合序列化.

    只要集合实现了IEnumable接口就可以进行序列化 Json序列化器为序列化及反序列化集合对象提供了良好的支持. ->Serializing 为了序列化一个集合---一个泛型的list,arr ...

  8. DynamicObject扩展--实现JSON和DynamicObject的序列化与反序列化

    度娘许久,找不到我满意的答案,于是自己东凑西凑实现一个. DynamicObject扩展--实现JSON和DynamicObject的序列化与反序列化,亲测良好. 看代码 using System; ...

  9. Newtonsoft.Json高级用法DataContractJsonSerializer,JavaScriptSerializer 和 Json.NET即Newtonsoft.Json datatable,dataset,modle,序列化

    原文地址:https://www.cnblogs.com/yanweidie/p/4605212.html Newtonsoft.Json介绍 在做开发的时候,很多数据交换都是以json格式传输的.而 ...

随机推荐

  1. Android设为系统默认的短信应用

    要设为系统默认的短信应用首先要配置一下AndroidManifest.xml文件,添加下列: <!-- BroadcastReceiver that listens for incoming S ...

  2. React-表单操作

    用户在表单填入的内容,属于用户跟组件的互动,所以不能用 this.props 读取 <!DOCTYPE html> <html lang="zh-cn"> ...

  3. Python 命令总结

    本章内容 pip pip install -r requirement.py(里面写入需要安装的包的名字) pip install django==1.9            #需要安装那个版本 P ...

  4. linux学习(三) -- lnmp环境切换php版本,并安装相应redis扩展

    原创文章,转载请注明出处   我想配置的环境是ubuntu+nginx+mysql+php+redis,其中php装两个版本,php7和php56 ubuntu+nginx+mysql+php的环境配 ...

  5. mof格式的文件怎么打开?用什么工具?

    托管对象格式 (MOF) 文件是创建和注册提供程序.事件类别和事件的简便方法.在 MOF 文件中创建类实例和类定义后,可以对该文件进行编译.有关更多信息,请参见编译托管对象格式 (MOF) 文件.编译 ...

  6. Asp.net自定义控件开发任我行(1)-笑傲江湖

    1.引言 参加工作5个月了,来到一家小公司,有几只老鸟带我,但不是我公司的,几个礼拜才来一次.来到公司做的第一个项目是web项目,里面有很多的重复代码,页面代码都是千篇一律,你这人也太水了吧,垃圾代码 ...

  7. IOS开发学习笔记016-Foundation框架

     Foundation 框架的学习 一.Foundation 常用结构体 1.NSRange(location,length)  typedef struct _NSRange { NSUIntege ...

  8. JavaScript: 理解对象

    ECMA-262 把对象定义为:“无序属性的集合,其属性可以包含基本值.对象或者函数.” 严格来讲,这就相当于说对象是一组没有特定顺序的值.对象的每个属性或者方法都有一个名字,而每个名字都映射到一个值 ...

  9. iptables + Denyhost抵御暴力破解

    使用iptables 现在每分钟连接ssh的次数 #允许本地环回接口访问   1 iptables -A INPUT -i lo -j ACCEPT #对已经建立的所有链接都放行   1 iptabl ...

  10. “取出数据表中第10条到第20条记录”的sql语句+selecttop用法

    1.首先,select top用法: 参考问题 select top n * from和select * from的区别 select * from table -- 取所有数据,返回无序集合 sel ...