zoukankan      html  css  js  c++  java
  • 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;
            }
    View Code

    调用

                    CupResponse resp = WebUtils.Assign<CupResponse>(respDictionary);
    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
  • 相关阅读:
    常用排序算法--合并排序和快速排序
    常用排序算法--冒泡排序及改进和插入排序时间复杂度分析
    常用数据结构图--拓扑排序
    常用数据结构栈的应用—-表达式求值
    Session原理,生命周期
    jsp内置对象out 和response.getwriter().write()的区别
    div中的div在父容器中水平居中或者垂直居中
    <!DOCTYPE html> 到底是什么意思?
    设置了环境变量,为什么执行javac报找不到javac: 找不到文件
    自动抽取邮件内容
  • 原文地址:https://www.cnblogs.com/hofmann/p/11556775.html
Copyright © 2011-2022 走看看