精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

對 JsonConvert 的認識太膚淺了,終于還是遇到了問題

開發 前端
雖然阻擊了幾個回合,但同時也發現了 Newtonsoft? 中還有特別多的未挖掘功能,真的需要好好研究研究,源碼已下好,接下來準備做個系列來解剖一下,值得一提的是 .Net?中已自帶了 System.Text.Json.JsonSerializer 類,目前來看功能還不算太豐富,簡單用用還是可以的,本篇就說到這里,希望對您有幫助。

一:背景

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 = "????",
                Report = new ReprotModel()
                {
                    TotalCustomerCount = 1000,
                    TotalTradeCount = 50
                },
                CustomerIDHash = new HashSet<int>(Enumerable.Range(1, 500000))
            };

            var json = JsonConvert.SerializeObject(algorithModel);

            File.WriteAllText("1.txt", json, Encoding.UTF8);

            Console.WriteLine("寫入完成!");
        }

圖片圖片

可以看到,僅一個json就 3.3M,這樣的記錄多來幾打后,在 kibana 上一檢索,瀏覽器就卡的要死,其實 CustomerIDHash 這個字段對我來說是可有可無的,就算存下來了也沒啥大用,所以需求就來了,如何屏蔽掉 CustomerIDHash。

二:尋求解決方案

1. 使用 JsonIgnore

有問題就網上搜啊,這一搜馬上就有人告訴你可以使用 JsonIgnoreAttribute 忽略特性,加好這個特性后繼續跑一下程序。

[Newtonsoft.Json.JsonIgnore]
    public HashSet<int> CustomerIDHash { get; set; }

圖片圖片

太好了,終于搞定了,但是靜下心來想一想,總感覺心里有那么一點不舒服,為什么這么說,一旦你給這個 CustomerIDHash 套上了 JsonIgnore ,這就意味著它在 JsonConvet 的世界中從此消失,也不管是誰在使用這個Model, 但這并不是我的初衷,我的初衷僅僅是為了在記錄日志的時候踢掉 CustomerIDHash,可千萬不要影響在其他場景下的使用哈,現在這種做法就會給自己,給別人挖坑,埋下了不可預知的bug,我想你應該明白我的意思,還得繼續尋找下一個方案。

2. 使用自定義的 JsonConverter

真的,Newtonsoft 太強大了,我都想寫一個專題好好彌補彌補我的知識盲區,其實在這個場景中不就是想把 HashSet<int> 給屏蔽掉嘛,Newtonsoft 中專門提供了一個針對特定類型的自定義處理類,接下來我就寫一段:

/// <summary>
    /// 自定義一個 針對 HashSet<int> 的轉換類
    /// </summary>
    public class HashSetConverter : Newtonsoft.Json.JsonConverter<HashSet<int>>
    {
        public override HashSet<int> ReadJson(JsonReader reader, Type objectType, HashSet<int> existingValue, bool hasExistingValue, JsonSerializer serializer)
        {
            return existingValue;
        }

        public override void WriteJson(JsonWriter writer, HashSet<int> value, JsonSerializer serializer)
        {
            writer.WriteNull();
        }
    }

就是這么簡單,然后就可以在 SerializeObject 的時候指定下自定義的 HashSetConverter 即可,然后再將程序跑起來看一下。

var json = JsonConvert.SerializeObject(algorithModel, Formatting.Indented, new HashSetConverter());

圖片圖片

從圖中看,貌似也是解決了,但我突然發現自己要鉆牛角尖了,如果我的實體中又來了一個頂級優質客戶群的 TopNCustomerIDHash,但因為這個CustomerID 比較少,我希望在 Json 中能保留下來,然后就是踢掉的那個 CustomerIDHash 我要保留 CustomerIDHash.Length,哈哈,搞事情哈,那接下來怎么解決呢?

  • 修改 Model 實體
class CustomerAlgorithmModel
    {
        public HashSet<int> CustomerIDHash { get; set; }

        // topN 優質客戶群
        public HashSet<int> TopNCustomerIDHash { get; set; }
    }
  • HashSetConverter 增加邏輯鑒別是否為保留字段
public override void WriteJson(JsonWriter writer, HashSet<int> value, JsonSerializer serializer)
        {
            if (writer.Path == "TopNCustomerIDHash")
            {
                writer.WriteStartArray();

                foreach (var item in value)
                {
                    writer.WriteValue(item);
                }

                writer.WriteEndArray();
            }
            else
            {
                writer.WriteValue(value.Count);
            }
        }
  • 最后給 TopNCustomerIDHash 賦值
var algorithModel = new CustomerAlgorithmModel()
            {
                CustomerType = 1,
                DisplayName = "????",
                Report = new ReprotModel()
                {
                    TotalCustomerCount = 1000,
                    TotalTradeCount = 50
                },
                CustomerIDHash = new HashSet<int>(Enumerable.Range(1, 500000)),
                TopNCustomerIDHash = new HashSet<int>(Enumerable.Range(1, 10)),
            };

三塊都搞定后就可以把程序跑起來了,如下圖:

圖片圖片

貌似鉆牛角尖的問題是解決了,既然鉆牛角尖肯定要各種鄙視,比如這里的 ReportModel 我是不需要的,CustomerType 我也是不需要的,我僅僅需要看一下 DisplayName 和 TotalCustomerCount 這兩個字段就可以了, 那這個要怎么解決呢?

3. 使用 匿名類型

確實很多時候記日志,就是為了跟蹤 Model 中你特別關心的那幾個字段,所以摻雜了多余的字段確實也是沒必要的,這里可以用匿名來解決,我就來寫一段代碼:

var json = JsonConvert.SerializeObject(new
    {
        algorithModel.DisplayName,
        algorithModel.Report.TotalCustomerCount
    }, Formatting.Indented);

圖片圖片

三:總結

雖然阻擊了幾個回合,但同時也發現了 Newtonsoft 中還有特別多的未挖掘功能,真的需要好好研究研究,源碼已下好,接下來準備做個系列來解剖一下,值得一提的是 .Net中已自帶了 System.Text.Json.JsonSerializer 類,目前來看功能還不算太豐富,簡單用用還是可以的,本篇就說到這里,希望對您有幫助。

責任編輯:武曉燕 來源: 一線碼農聊技術
相關推薦

2022-09-04 19:15:02

運維技術

2024-10-10 12:34:44

2021-10-26 08:22:38

消息堆積擴容RocketMQ

2020-02-23 16:33:02

GitHub印度子公司

2023-03-02 06:00:00

2023-11-02 08:43:08

protocgo兼容

2017-10-24 12:32:03

小程序APPbug

2018-12-26 09:03:30

物聯網IOT智能

2024-12-17 10:07:13

死鎖數據庫日志

2021-03-08 08:16:30

負載均衡系統流量

2020-08-12 15:29:33

蘋果iPhone微信

2021-09-15 09:31:39

前端開發工具

2010-08-17 13:47:09

DB2還原

2013-07-26 09:16:13

SwiftOpenStackSwiftStack

2021-03-05 14:40:49

Chrome瀏覽器內存

2022-05-24 16:09:38

前端腳本

2019-06-17 08:30:09

TCPIP通信協議

2024-01-24 09:02:45

React版本Next.js

2013-09-24 14:57:10

2020-04-24 20:05:16

VueAxios前端
點贊
收藏

51CTO技術棧公眾號

人禽交欧美网站| 美女扒开腿让男人桶爽久久动漫| 国产精品家庭影院| 亚洲一区二区三区在线免费观看| 九九热国产视频| 欧美色图国产精品| 欧美成人三级在线| 日本成人在线免费视频| 成人在线播放免费观看| 97久久超碰精品国产| 国产精选久久久久久| 国产亚洲欧美久久久久| 成人在线免费小视频| 精品国产91九色蝌蚪| 在线观看免费成人av| 久色国产在线| 亚洲欧美中日韩| 精品伦精品一区二区三区视频| 在线观看你懂的网站| 国内精品福利| 日韩视频―中文字幕| 亚洲色图14p| 一区二区三区亚洲变态调教大结局 | 青青久久av北条麻妃海外网| 日韩三级久久久| 国产精品中文字幕亚洲欧美| 精品久久久久一区| 午夜免费看视频| 日本久久免费| 精品高清美女精品国产区| 久久久无码中文字幕久...| 国产在线观看免费| 99在线精品视频| 99国精产品一二二线| 国产一区二区三区在线观看| 国产精品综合色区在线观看| 欧美精品国产精品日韩精品| 欧美性猛交xxxxx少妇| 日韩在线观看电影完整版高清免费悬疑悬疑| 亚洲黄页视频免费观看| 中文字幕亚洲日本| 国产精品视频一区二区三区综合| 欧美制服丝袜第一页| 久章草在线视频| 国产传媒在线观看| 一区二区在线免费| 今天免费高清在线观看国语| 巨大荫蒂视频欧美大片| 国产精品久久久久婷婷二区次| 日本高清久久一区二区三区 | 在线免费看av不卡| 欧美成人国产精品一区二区| 亚洲精品国模| 国产婷婷成人久久av免费高清| www.88av| 一道本一区二区三区| 亚洲欧美国产va在线影院| 好吊色视频一区二区三区| 九九热hot精品视频在线播放| 欧美成人猛片aaaaaaa| 在线中文字日产幕| 成人动态视频| 亚洲成人精品久久| 久久精品成人av| 国产日韩欧美一区二区三区| 中文字幕日韩精品在线| 国产色无码精品视频国产| 午夜日韩电影| 97在线视频免费播放| 亚洲精品男人的天堂| 三级在线观看一区二区| 国产狼人综合免费视频| 99精品人妻无码专区在线视频区| 欧洲亚洲精品视频| 国产精品99在线观看| 自拍偷拍亚洲一区| 国产精品白丝喷水在线观看| 欧美日本一区| 青青草成人在线| 中文字幕日韩三级| 国产不卡在线视频| 久久国产精品久久| 亚洲图片88| 亚洲一二三四在线观看| 欧美三级午夜理伦三级| 主播大秀视频在线观看一区二区| 欧美日韩精品欧美日韩精品| 自拍视频第一页| 亚洲小说图片| 欧美成人精品在线观看| 久久久国产精品成人免费| 丝袜亚洲另类欧美综合| 91夜夜揉人人捏人人添红杏| 人妻精品一区一区三区蜜桃91| 久久久久高清精品| 久久天天东北熟女毛茸茸| 污的网站在线观看| 一本大道久久a久久精品综合| 中文字幕第88页| 精品欧美午夜寂寞影院| 最近2019年中文视频免费在线观看| 免费一级片在线观看| 老司机精品导航| 国产不卡一区二区在线观看| 国产youjizz在线| 亚洲一二三四久久| 亚洲欧美偷拍另类| 日韩最新在线| 欧美成年人在线观看| www.国产高清| 国产一区二区免费在线| 日本一区二区精品| 92久久精品| 91麻豆精品国产91久久久久久| 亚洲日本久久久| 99精品在线观看| 欧美专区中文字幕| 国产女人18毛片18精品| 99久久伊人网影院| 日韩a级黄色片| 只有精品亚洲| 亚洲欧美日韩精品久久| 日韩av一二三区| 国产一区视频网站| 一区二区在线不卡| 日韩在线影院| 亚洲开心激情网| 免费毛片一区二区三区| 国产精品一卡二| 一本二本三本亚洲码| 国产成人精品亚洲日本在线观看| 亚洲国产精品yw在线观看| 欧美日韩精品在线观看视频| 久久99精品久久久| 亚洲精品视频一二三| 网友自拍亚洲| 亚洲开心激情网| 国产三级av片| 91色综合久久久久婷婷| 男人日女人逼逼| jizz国产精品| 国内精品久久久久影院 日本资源| 国产成人精品一区二区无码呦| 国产精品天天看| 网站一区二区三区| 成人情趣视频| 国产日韩欧美黄色| 欧美尤物美女在线| 5858s免费视频成人| 国产老头老太做爰视频| 极品美女销魂一区二区三区| 亚洲v欧美v另类v综合v日韩v| 日韩欧美看国产| 亚洲人成电影在线| 中文字幕乱码中文字幕| 国产精品久久久久影视| 性欧美在线视频| 亚洲国产精品久久久天堂| 亚洲一区二区三区视频| 91精选在线| 精品国产第一区二区三区观看体验| 国产无套粉嫩白浆内谢| 99国产欧美另类久久久精品| 日韩欧美在线播放视频| av中文一区| 国产视频福利一区| 色婷婷在线播放| 日韩av在线导航| 中文字幕免费观看| 国产精品久久久久天堂| 亚洲一区二区三区三州| 精品av久久久久电影| 欧美18视频| 成人国产激情| 久久香蕉国产线看观看网| 亚洲精品福利网站| 欧美日韩激情美女| 欧洲性xxxx| 国产乱码精品一品二品| 日韩中文字幕在线免费| 国产成人1区| 成人在线播放av| av成人 com a| 在线观看中文字幕亚洲| 国产黄色av网站| 日韩欧美国产成人| 国产精品视频一区二区在线观看| 国产盗摄精品一区二区三区在线 | 日本亚洲视频在线| 久久www视频| 国产中文字幕一区二区三区| 91中文在线视频| 亚洲一二三四| 欧美成人黑人xx视频免费观看| 桃花色综合影院| 91精品国产色综合久久| 日操夜操天天操| 亚洲丝袜精品丝袜在线| 中文字幕 亚洲一区| 麻豆传媒一区二区三区| 日韩日韩日韩日韩日韩| 欧美电影三区| 久久精品99久久| 日韩在线精品强乱中文字幕| 国产精品高潮在线| а√在线天堂官网| 久久精品国产一区二区电影| 丝袜+亚洲+另类+欧美+变态| 日韩一级在线观看| 波多野结衣不卡| 婷婷国产在线综合| 国产大片免费看| 欧美激情一区二区三区四区| 扒开伸进免费视频| 九一九一国产精品| 欧美激情成人网| 最新成人av网站| japanese在线视频| 日本电影一区二区| 久久婷婷国产综合尤物精品| 日韩中文字幕视频网| 国产美女久久精品香蕉69| 天堂中文最新版在线中文| 欧美猛少妇色xxxxx| 免费**毛片在线| 一区二区三区美女xx视频| 五月婷婷伊人网| 亚洲成成品网站| 亚洲av无码国产精品久久不卡| 欧美另类一区二区三区| 中文字幕观看视频| 色婷婷av一区二区三区软件| av大片在线免费观看| 午夜欧美大尺度福利影院在线看| 午夜69成人做爰视频| 亚洲欧美日韩国产中文在线| 激情高潮到大叫狂喷水| 中文字幕va一区二区三区| 欧洲女同同性吃奶| 久久美女艺术照精彩视频福利播放| 中文视频在线观看| 成人国产亚洲欧美成人综合网 | www国产精品av| 久久久午夜精品福利内容| 成人夜色视频网站在线观看| 伦伦影院午夜理论片| 国产精品一区二区免费不卡 | 久久精品一区蜜桃臀影院| 成人性生活免费看| 91免费精品国自产拍在线不卡| 中国一级特黄录像播放| 9人人澡人人爽人人精品| 国产xxxxxxxxx| 91看片淫黄大片一级| 欧美日韩精品在线| 强迫凌虐淫辱の牝奴在线观看| 国产aⅴ精品一区二区三区色成熟| 久久无码人妻一区二区三区| 国产精品一区二区在线播放| 亚洲v在线观看| av一区二区三区在线| 搡老熟女老女人一区二区| 国产亚洲欧洲997久久综合| 一级特黄曰皮片视频| 国产精品久久久久久久久搜平片| sm捆绑调教视频| 亚洲精品国产精品乱码不99| 久久久美女视频| 好吊成人免视频| 五月激情丁香网| 欧美日韩一区二区三区在线| 97人人爽人人爽人人爽| 亚洲成人久久电影| 美女毛片在线看| 日韩亚洲精品视频| 国产网红女主播精品视频| 69av在线视频| 色猫猫成人app| 97超级在线观看免费高清完整版电视剧| 视频精品一区| 欧美一区二区在线| 一本到12不卡视频在线dvd| 九九爱精品视频| 奇米777欧美一区二区| 波多野结衣网页| ww亚洲ww在线观看国产| 日韩在线视频免费看| 亚洲午夜私人影院| 最新中文字幕第一页| 日韩欧美色电影| 国产系列在线观看| 欧美人与性动交a欧美精品| 在线天堂资源| 亚洲最大的av网站| 最新国产精品视频| 强开小嫩苞一区二区三区网站| 99在线|亚洲一区二区| 在线观看免费的av| 99久久99久久精品免费观看 | 亚洲精品日韩综合观看成人91| 久久久久久91亚洲精品中文字幕| 欧美日韩卡一卡二| 日本午夜在线视频| 欧美成人四级hd版| 久久亚洲国产精品尤物| 久久久久久久久一区二区| 中文字幕乱码亚洲无线精品一区| 免费在线观看日韩视频| 国产精品主播直播| gv天堂gv无码男同在线观看| 精品国产福利视频| 国产激情视频在线播放 | 国产综合动作在线观看| 999国产精品999久久久久久| 国产乱子夫妻xx黑人xyx真爽| 国产精品综合二区| 精品视频第一页| 日本韩国视频一区二区| 岛国视频一区免费观看| 69精品国产久热在线观看| 伊人久久大香线蕉午夜av| 久久精品1区| 日本黄色免费观看| 夜夜嗨av一区二区三区| 97超碰国产在线| 中文字幕亚洲字幕| 日韩一区二区三区免费| 久久久久成人精品免费播放动漫| 国产精品v亚洲精品v日韩精品 | 国产午夜精品美女视频明星a级| 丁香高清在线观看完整电影视频| 成人久久精品视频| 欧美激情国产在线| 日韩av片网站| 欧美激情中文不卡| 在线观看污污网站| 亚洲天堂影视av| 欧美性片在线观看| 日韩国产精品一区二区| 久久一区欧美| 91成年人网站| 一本一道波多野结衣一区二区| 亚洲av电影一区| 91wwwcom在线观看| 日韩欧美中文字幕电影| 国内性生活视频| 91视频观看免费| 男人天堂2024| 一级做a爰片久久毛片美女图片| 欧美成人ⅴideosxxxxx| 日本一区二区在线| 美女诱惑一区二区| 青青青视频在线免费观看| 欧美三级视频在线观看| 欧洲美女少妇精品| 91久久精品国产91久久性色| 一区二区电影| 中文字幕1区2区| 精品国产精品自拍| 久青草国产在线| 国产精品一区二区久久久 | 欧美老熟妇喷水| 久久精品人人做人人爽97| 这里只有久久精品视频| www国产精品com| 视频免费一区二区| 毛片在线视频播放| 久久精品在线免费观看| 91久久精品国产91性色69| 久久av在线看| 美女一区2区| 男女啪啪网站视频| 亚洲欧美国产毛片在线| 动漫av一区二区三区| 日本免费在线精品| 国产精品成人av| 精品熟女一区二区三区| 色又黄又爽网站www久久| 麻豆影院在线| 国产乱人伦精品一区二区| 日日夜夜免费精品| 91插插插插插插| 精品一区电影国产| 91麻豆精品一二三区在线| 国产精品www在线观看| 国产无人区一区二区三区| 国产男男gay网站| 日本精品在线视频| 中文字幕免费一区二区三区| 玖玖爱在线精品视频| 精品一区二区三区中文字幕视频 | 狠狠综合久久av一区二区| 欧美综合在线观看| 欧美一区激情| 亚洲区自拍偷拍| 日韩午夜激情视频| 欧美日一区二区三区| 波多野结衣av一区二区全免费观看| 国产午夜精品一区二区三区嫩草 | 日韩亚洲国产中文字幕|