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
  • 相关阅读:
    linux 命令——19 find (转)
    linux 命令——18 locate (转)
    linux 命令——17 whereis(转)
    linux 命令——16 which(转)
    linux 命令——15 tail (转)
    linux 命令——14 head (转)
    Java for LeetCode 038 Count and Say
    Java for LeetCode 037 Sudoku Solver
    Java for LeetCode 036 Valid Sudoku
    Java for LeetCode 035 Search Insert Position
  • 原文地址:https://www.cnblogs.com/hofmann/p/11556775.html
Copyright © 2011-2022 走看看