C#字典转对象
/// <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; } }