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","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字符串是醬紫的。。。。

 

很神奇吧。   

這里只是提供一種思路與實現方法,具體怎么變通 還需要各位看官自己的想法。

                                                                       ------------------------------------------------------Make by 夜色、花清淺

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM