一:背景

1. 讲故事

在开始本文之前,真的好想做个问卷调查,到底有多少人和我一样,对 JsonConvert 的认识只局限在 SerializeObject 和 DeserializeObject 这两个方法上(┬_┬), 这样我也好结伴同行,不再孤单落魄,或许是这两个方法基本上能够解决工作中 80% 的场景,对于我来说确实是这样,但随着编码的延续,终究还是会遇到那剩下的 20% ,所以呀。。。

我的场景是这样的:前段时间写业务代码的时候,我有一个自定义的客户算法类型的Model,这个Model中有这种算法类型下的客户群以及Report统计信息,还用了 HashSet 记录了该类型下的 CustomerID集合,为了方便讲述,我把Model简化如下:


   class CustomerAlgorithmModel
   {

       public string DisplayName { get; set; }

       public int CustomerType { get; set; }

       public ReprotModel Report { get; set; }

       public HashSet<int> CustomerIDHash { get; set; }
   }

   class ReprotModel
   {

       public int TotalCustomerCount { get; set; }

       public int TotalTradeCount { get; set; }
   }

那有意思的就来了,我个人是有记日志的癖好,就想着以后不会出现死无对证的情况,然后就理所当然的使用 JsonConvert.SerializeObject, 这一下就出问题了,日志送入到了 ElasticSearch ,然后通过 Kibana 查不出来,为啥呢?看完上面的 Model 我想你也猜到了原因,json体太大了哈,好歹 CustomerIDHash 中也有几十万个撒,这一下全导出成json了,这 size 还能小吗?要不我写段代码看一看。


       static void Main(string[] args)
       
{
           var algorithModel = new CustomerAlgorithmModel()
           {
               CustomerType = 1,
               DisplayName = "