/// <summary> /// Assign parameters to specified objects /// </summary> /// <typeparam name="T">object type</typeparam> /// <param name="dic">Fields/values</param> /// <returns></returns> static public T Assign<T>(Dictionary<string, string> dic) where T : new() { Type myType = typeof(T); T entity = new T(); var fields = myType.GetProperties(); string val = string.Empty; object obj = null; foreach (var field in fields) { if (!dic.ContainsKey(field.Name)) continue; val = dic[field.Name]; object defaultVal; if (field.PropertyType.Name.Equals("String")) defaultVal = ""; else if (field.PropertyType.Name.Equals("Boolean")) { defaultVal = false; val = (val.Equals("1") || val.Equals("on")).ToString(); } else if (field.PropertyType.Name.Equals("Decimal")) defaultVal = 0M; else defaultVal = 0; if (!field.PropertyType.IsGenericType) obj = string.IsNullOrEmpty(val) ? defaultVal : Convert.ChangeType(val, field.PropertyType); else { Type genericTypeDefinition = field.PropertyType.GetGenericTypeDefinition(); if (genericTypeDefinition == typeof(Nullable<>)) obj = string.IsNullOrEmpty(val) ? defaultVal : Convert.ChangeType(val, Nullable.GetUnderlyingType(field.PropertyType)); } field.SetValue(entity, obj, null); } return entity; }
調用
CupResponse resp = WebUtils.Assign<CupResponse>(respDictionary);
單元測試
[TestMethod] public void AssignTest() { string respDataJson = "instId=&merNo=&signature=&respData=eyJyZXNwTXNnIjoi5ZWG5oi35oql5paH6Kej5p6Q5byC5bi4IiwicmVzcENvZGUiOiIxMDAxMDAwNCJ9"; Dictionary<string, string> respDictionary = WebUtils.ParseToDictionary(respDataJson); if (respDictionary != null) { CupResponse resp = new CupResponse() { instId = respDictionary["instId"], merNo = respDictionary["merNo"], signature = respDictionary["signature"], respData = respDictionary["respData"] }; CupResponse resp2 = WebUtils.Assign<CupResponse>(respDictionary); } }
類
/// <summary> /// 交易密文報文響應類 /// </summary> public class CupResponse { /// <summary> /// 簽名值,商戶報文簽名信息 /// </summary> public string signature { get; set; } /// <summary> /// 商戶號,同請求 /// </summary> public string merNo { get; set; } /// <summary> /// 機構號,同請求 /// </summary> public string instId { get; set; } /// <summary> /// 響應報文,Base64 后的響應報文體,對響應明文報文JSON 數據取 UTF-8 字節流進行Bases64 編碼 /// </summary> public string respData { get; set; } }
