Json.Net如何在序列化之前修改属性值

本文介绍如何使用Json.NET将日期时间属性转换为时间差的秒数,并在序列化过程中避免显示时间戳,提供了一种在生成JSON字符串前修改属性值的方法,适用于处理大量类和属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天写一个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字符串是酱紫的。。。。

 

很神奇吧。   

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值