【问题标题】:Convert values based on parameter type using reflection使用反射根据参数类型转换值
【发布时间】:2014-06-25 16:53:30
【问题描述】:

我有一个对象数组,我想根据使用反射的方法的参数类型将这些对象转换为其实际类型。 字典将根据 json 字符串发生变化。所以我想将对象数组设置为适当的类型以传递调用方法。

这是我的代码。

 class Program
{
    static void Main(string[] args)
    {
        try

   string json =@"{""Id"":21}";
   Dictionary<string, object> paramList = JsonConvert.DeserializeObject<Dictionary<string, object>>(json);
            Assembly asm = Assembly.GetExecutingAssembly();
            Type jobType = (from t in asm.GetTypes()
                            where t.IsClass && t.FullName == "pathTest.Order"
                            select t).FirstOrDefault();
            MethodInfo infoMethod = jobType.GetMethod("GetOrder");
            object jobClassObject = asm.CreateInstance(jobType.FullName);
            ParameterInfo[] parameters = infoMethod.GetParameters();
            int count = parameters.Count();
            Object[] pArray = { };

            if (count > 0)
            {
                pArray = new object[count];

                foreach (var methodArg in parameters)
                {
                    var item = paramList.Where(m => m.Key == methodArg.Name).FirstOrDefault();


                    pArray[methodArg.Position] = Int32.Parse(item.Value.ToString());//hard coded

 //Here I want to cast the value based on parameter type . 
 //parameter type(item.Value.ToString())

                }


            }


            jobType.InvokeMember("GetOrder", BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, jobClassObject, pArray);

        }
        catch (Exception e)
        {
        }
        Console.ReadLine();
    }
}

【问题讨论】:

    标签: c# asp.net-mvc-4 reflection


    【解决方案1】:

    参数的实际类型存储在methodArg.ParameterType中。您可以使用Convert.ChangeType 更改从您的 json 字符串中获取的对象的类型:

    Type paramType = methodArg.ParameterType;
    pArray[methodArg.Position] = Convert.ChangeType(item.Value, paramType);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-05
      • 2018-01-30
      • 2021-05-16
      • 2023-03-06
      • 2010-10-11
      • 1970-01-01
      • 2012-01-13
      • 1970-01-01
      相关资源
      最近更新 更多