zoukankan      html  css  js  c++  java
  • 转载自——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

  • 相关阅读:
    JavaScript构造函数学习笔记
    JavaScript面向对象编程学习笔记
    Maven学习--Maven项目目录、Maven坐标
    Maven学习--安装说明
    Watir问题---gem install watir-classic报错: ERROR: Error installing watir-classic: ERROR: Failed to build gem native extension.
    TestLink问题 —图表中文乱码
    TeskLink—增加一种需求类型(业务流程)(version1.9.8)
    Watir问题--LoadError: cannot load such file -- watir-classic
    Watir--Ruby + Watir环境安装
    Watir问题--Selenium::WebDriver::Error::WebDriverError: unexpected response, code=502, content-type="text/html"
  • 原文地址:https://www.cnblogs.com/ShaYeBlog/p/4050376.html
Copyright © 2011-2022 走看看