background image

Sep 30 2022

透過Dapper存取Postgresql Json column 自動反序列化

有時候一個物件我會把它序列化後使用JSON的方式存放到postgresql中,但把它取出後卻無法透過ORM直接做資料的對應,然後自己就土炮了做法, 把資料撈出後在針對欄位去反序列化,這樣做一開始覺得好像沒什麼,但這樣的資料變多了以後發現問體頗大,所以上網找了一些解決方案, 但關鍵字嚇得不好反而找到許多更奇怪的做法後來在stackoverflow上看到了這招真心覺得很棒的方法,於是筆記下來!

當初也有嘗試過使用CustomPropertyTypeMap來處理,但這個對於欄位與Class屬性名稱對應不同時使用, 當欄位資料需要做特殊的轉換時就需要Dapper的ITypeHandler來定義什麼樣的資料型別需要怎麼去做處理, 所以建立了一個class去繼承 SqlMapper.ITypeHandler然後實作類似Get/Set的物件存取的方式。

做好了這樣的物件後,只要在資料庫的連線物件上註冊當遇到xxxx型別時,使用JsonTypeHandler做處理,這樣一來就必須要土炮把資料撈出來後 使用callback的方式做反序列化在僵值放回原本需要的物件中,減少了許多複雜的狀態。

參考資料

can-dapper-deserialize-json-stored-as-text

文章標籤