转载自——Json.Net如何在序列化之前修改属性值
今天写一个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如何在序列化之前修改属性值的更多相关文章
- JSON字符串反序列化成对象_部分属性值反序列化失败
简介:本人在开发webapi接口时遇到了:一个复杂的Json字符串在反序列化为对象时报,无法发序列化其中的一个属性对象? 使用方法: InternalRecommendRequestFormModel ...
- 前台jquery+ajax+json传值,后台处理完后返回json字符串,如何取里面的属性值?(不用springmvc注解)
一.取属性值 前台页面: function select(id){ alert("hfdfhdfh"+id); $.ajax({ url:"selectByid.jsp& ...
- dhtmlxtree 如何得到xml,json等文件中的自定义的属性值
先看代码: var TreeForJSON = new dhtmlXTreeObject('TreeForJSON', '100%', '100%', 0); TreeForJSON.setImage ...
- c# json 序列化如何去掉null值
要将一个对象序列化,可是如果对象的属性为null的时候,我们想将属性为null的都去掉. 在这里我使用Newtonsoft.Json.dll 记录一下序列化以及反序列化 json字符串转对象 Mode ...
- 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 ...
- JSON与js对象序列化
JavaScript对象表示法(JavaScript Object Notation,简称JSON)是一种轻量级的数据交换格式,它基于js字面量表示法,是js的一个子集.虽然是一个js的子集但是他与语 ...
- Json.Net学习.集合序列化.
只要集合实现了IEnumable接口就可以进行序列化 Json序列化器为序列化及反序列化集合对象提供了良好的支持. ->Serializing 为了序列化一个集合---一个泛型的list,arr ...
- DynamicObject扩展--实现JSON和DynamicObject的序列化与反序列化
度娘许久,找不到我满意的答案,于是自己东凑西凑实现一个. DynamicObject扩展--实现JSON和DynamicObject的序列化与反序列化,亲测良好. 看代码 using System; ...
- Newtonsoft.Json高级用法DataContractJsonSerializer,JavaScriptSerializer 和 Json.NET即Newtonsoft.Json datatable,dataset,modle,序列化
原文地址:https://www.cnblogs.com/yanweidie/p/4605212.html Newtonsoft.Json介绍 在做开发的时候,很多数据交换都是以json格式传输的.而 ...
随机推荐
- Android设为系统默认的短信应用
要设为系统默认的短信应用首先要配置一下AndroidManifest.xml文件,添加下列: <!-- BroadcastReceiver that listens for incoming S ...
- React-表单操作
用户在表单填入的内容,属于用户跟组件的互动,所以不能用 this.props 读取 <!DOCTYPE html> <html lang="zh-cn"> ...
- Python 命令总结
本章内容 pip pip install -r requirement.py(里面写入需要安装的包的名字) pip install django==1.9 #需要安装那个版本 P ...
- linux学习(三) -- lnmp环境切换php版本,并安装相应redis扩展
原创文章,转载请注明出处 我想配置的环境是ubuntu+nginx+mysql+php+redis,其中php装两个版本,php7和php56 ubuntu+nginx+mysql+php的环境配 ...
- mof格式的文件怎么打开?用什么工具?
托管对象格式 (MOF) 文件是创建和注册提供程序.事件类别和事件的简便方法.在 MOF 文件中创建类实例和类定义后,可以对该文件进行编译.有关更多信息,请参见编译托管对象格式 (MOF) 文件.编译 ...
- Asp.net自定义控件开发任我行(1)-笑傲江湖
1.引言 参加工作5个月了,来到一家小公司,有几只老鸟带我,但不是我公司的,几个礼拜才来一次.来到公司做的第一个项目是web项目,里面有很多的重复代码,页面代码都是千篇一律,你这人也太水了吧,垃圾代码 ...
- IOS开发学习笔记016-Foundation框架
Foundation 框架的学习 一.Foundation 常用结构体 1.NSRange(location,length) typedef struct _NSRange { NSUIntege ...
- JavaScript: 理解对象
ECMA-262 把对象定义为:“无序属性的集合,其属性可以包含基本值.对象或者函数.” 严格来讲,这就相当于说对象是一组没有特定顺序的值.对象的每个属性或者方法都有一个名字,而每个名字都映射到一个值 ...
- iptables + Denyhost抵御暴力破解
使用iptables 现在每分钟连接ssh的次数 #允许本地环回接口访问 1 iptables -A INPUT -i lo -j ACCEPT #对已经建立的所有链接都放行 1 iptabl ...
- “取出数据表中第10条到第20条记录”的sql语句+selecttop用法
1.首先,select top用法: 参考问题 select top n * from和select * from的区别 select * from table -- 取所有数据,返回无序集合 sel ...