有時候就會有這種需求,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 效果,得到是一樣的結果
沒有留言:
張貼留言