2021年5月15日 星期六

支援 Object 與 Dictionary 互轉

有時候就會有這種需求,Thirty Party 詭異的 Lib 設計,Method 不支援泛型,

也僅能傳入 Dictionary,故需要將 Object 轉成 Dictionary 後傳入...



[ 2021/5/29 更新]


加入 ExtensionMethods 的寫法,使用起來更方便


ToObject 方法,有兩個多載


ToDictionary 方法,有兩個多載



---------

 

思考...

希望方法支援泛型,這樣要轉換時可指定型別,方便使用及閱讀


首先設計 ConvertToObject,如下圖


依照上圖,首先使用 typeof(T).GetProperties() 取得所有屬性,下一行透過反射實例化物件,

接著透過 foreach 迴圈設定物件屬性的值,其中會有判斷,該屬性是否包含在 dictionary 內,

若有則進入設定,值得注意的是,SetValue 方法中,第二個參數是傳入object value 值,但我希望

可以直接依據 propertyType 來設定,故搭配了 Convet.ChangeType 方法轉型


實際效果,先設計 Dictionary ,待轉換為物件(Person)後,跑迴圈列出屬性值



再來設計 ConvertToDictionary,如下圖


依照上圖,首先使用 typeof(T).GetProperties 取得所有屬性,其中有指定 public 與 nonpublic ,

這樣才可以取得 internal 類型的屬性,後面再透過迴圈設定 dictionary 


實際效果,先設計person 物件,待轉換成 dictionary 後,跑迴圈印出各屬性值



也許有人會覺得 Dictionary<string,object> 第二個 value 型別為 object,能否再設計為泛型,

方便使用者指定,以下調整 ConvertToDictionary


其中,在 Add 方法中,需要指定轉型(TValue)


此時,原本的設計,就直接呼叫上圖的方法即可,形成多載,如下圖


再次實際檢視 ConvertToDictionary 效果,得到是一樣的結果

沒有留言:

張貼留言