转载自——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

时间: 2024-10-02 02:01:42

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

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); 你会发现这一串的代码会生成如下的东西: {"A":"123&

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

一.取属性值 前台页面: function select(id){ alert("hfdfhdfh"+id); $.ajax({ url:"selectByid.jsp", datatype:'json', data:{id:id}, // 发送数据 error:function(data){ alert("出错了,没有这个学生!!"); }, success:function(data){ alert(data); var json = eva

JSON与js对象序列化

JavaScript对象表示法(JavaScript Object Notation,简称JSON)是一种轻量级的数据交换格式,它基于js字面量表示法,是js的一个子集.虽然是一个js的子集但是他与语言无关,它可以用于在现在所有的编程语言编写的应用程序之间进行数据交换.是一种文本格式,比较容易读写. json是一个容纳“名/值”对的无序集合,名字可以是任意字符串,值可以使任意的json类型的值.大多数编程语言都有被映射为json的数据类型,比 如对象(object),字典(dictionary)

JSON.NET与LINQ序列化示例教程

1.手动创建JSON对象和数组 JSON格式主要包括对象和数组两种形式,在JSON.NET中分别用JArray和JObject表示,属性用JProperty表示,属性值用 JValue表示,这些对象都直接或间接继承JToken抽象类,而且都有一个ToString方法,该方法用于直接输出元素的JSON字符串表示形式, 我们可以通过JArray和JObject手动创建JSON并序列化,使用方式非常灵活. JArray array = new JArray(); array.Add("Manual t

DELPHI XE2 采用 JSON 的方式来序列化对象

DELPHI XE2 采用 JSON 的方式来序列化对象 以下代码测试通过.问题是里面的中文,在反序列化后是乱码. 1. 序列化对象为字符串,Subject 里面的中文看起来正常,仍然是中文: 2. 反序列化为对象后,Subject 里面的中文是乱码. XE2 处理 Unicode 还是有问题啊. TItemRecord = class private FID: string; FSubject: string; FADate: TDateTime; published property ID:

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

只要集合实现了IEnumable接口就可以进行序列化 Json序列化器为序列化及反序列化集合对象提供了良好的支持. ->Serializing 为了序列化一个集合---一个泛型的list,array,dictionary,或者自定义集合---简单地调用序列化器,使用您想要进行序列化的集合对象作为参数,Json.Net会序列化集合以及所有它包含的值. 示例: public class Product { public string Name { get; set; } public decimal

在mvc返回JSON时出错:序列化类型为“System.Data.Entity.DynamicProxies.Photos....这个会的对象时检测到循环引用 的解决办法

在MVC中返回JSON时出错,序列化类型为“System.Data.Entity.DynamicProxies.Photos....这个会的对象时检测到循环引用. public ActionResult GetSdirsbyFdirid(int id) { // db.Configuration.LazyLoadingEnabled = false; db.Configuration.ProxyCreationEnabled = false; List<Seconddirectory> lis

JSON的解析和序列化

背景:XML曾经是互联网传输结构化数据的事实标准,但XML过于繁琐.冗长,而且解析麻烦,同XML数据结构要解析成DOM文档而且从中提取数据极为麻烦相比,JSON可以解析为JavaScript对象的优势极其明显.相比之下,JOSN是在JavaScript中读写结构化数据更好的方式,可以把JSON字符串直接传给eval(),而且不必创建DOM对象.JSON是一种数据格式,很多编程语言都有针对JOSN的解析器和序列化器. 一.JSON为JavaScript子集,可以使用eval解析JSON字符串,并返

分享一个快速的Json(反)序列化开源项目 Jil

我们不缺少JSON的序列化库,但我们缺少一个性能非常好的库,这对于网站来说非常重要.今天我发现了Jil. 他是开源的代码: https://github.com/kevin-montrose/Jil 在他主页上有详细的介绍其性能的表现,我这里就不转述了,他最重要的特点就是性能,Emit那当然不会少了,当想让他超越其他的库光一个Emit肯定不行,他还有很多其他的优化. 公共缓冲区 为介绍GC的压力,他使用了诸如builder.CommonCharBuffer这样的功能缓冲,builder.Comm