/// <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("") || val.Equals("on")).ToString();
}
else if (field.PropertyType.Name.Equals("Decimal"))
defaultVal = 0M;
else
defaultVal = ; 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; }
}

最新文章

  1. flash跨域访问,crossdomain.xml,error #2048
  2. iOS开发之记录用户登录状态
  3. 实现一个名为Person的类和它的子类Employee,Employee有两个子类Faculty 和Staff。
  4. 用JS写的无缝滚动特效
  5. centos 如何用 rsyslog 搭建本地日志服务(续1: omprog模块与php deamon的配合使用)
  6. 翻译-让ng的$http服务与jQuerr.ajax()一样易用
  7. vue.js实战——升级版购物车
  8. java核心技术-(总结自杨晓峰-java核心技术36讲)
  9. Django | 模型类变更后生成迁移文件,报错:You are trying to add a non-nullable field &#39;BookName&#39; to BookInfo without a default....
  10. 以添加评论组件为例看angular2请求数据的处理
  11. 266A
  12. HDU4328 Cut the cake(动规:最大子矩形问题/悬线法)
  13. JS禁止用F5键
  14. php excel原理
  15. css3-自定义字体
  16. windows 系统相关配置
  17. 如何使用canvas进行2d绘图
  18. 18CCPC网赛A 贪心
  19. 69. Sqrt(x) 求根号再取整
  20. 【3dsMax安装失败,如何卸载、安装3dMax 2014?】

热门文章

  1. html5获取地理位置和定位
  2. Apache Flink - 命令
  3. 使用sequelize-auto 生成mysql 表的实体时主键没有 autoIncrement: true 属性
  4. 第11组 Beta冲刺(5/5)
  5. 一、Linux的基础使用--登录、开关机与在线、命令的查询帮助
  6. Flutter移动电商实战 --(34)列表页_小BUG的修复
  7. Xshell查看日志
  8. UML期末复习题——2.1:Use Case Diagram
  9. Object.keys() 遍历对象
  10. webdriervAPI(CSS定位元素)