/// <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;
}
知识兔View Code调用
单元测试
[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);
}
}
知识兔View Code类
/// <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; }
}
知识兔View Code