获取要传递给接受泛型的方法的对象类型

时间:2011-08-22 16:41:43

标签: c# asp.net-mvc-3 generics

我只能用伪代码写这个,因为我不知道正确的语法..如果有的话。

我有一个我想要调用的方法:

JsonConvert.DeserializeObject<Type>(string value);

哪会返回给定的类型。

问题是我不知道如何将类型传递给该方法,因为我不会在构建时知道类型。我的MVC控制器的方法是:

public JsonResult Save(string typeName, string model)
{
    // Insert your genius answer here.
}

我需要稍后使用我的类型,以便我可以使用DataContractSerializer来存储它。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

如果您在编译时不知道类型,那么您将不得不使用Reflection API来调用该方法。

之前已经回答过,例如,请参阅Jon's Skeet's answer on this question

答案 1 :(得分:1)

您可以使用Type.GetType()方法。它有一个重载,它接受string类型的程序集限定名称,并返回相应的Type

您的代码看起来像这样:

public JsonResult Save(string typeName, string model)
{
    // My genius answer here
    Type theType = Type.GetType(typeName);
    if (theType != null)
    {
        MethodInfo mi = typeof(JsonConvert).GetMethod("DeserializeObject");
        MethodInfo invocableMethod = mi.MakeGenericMethod(theType);
        var deserializedObject = invocableMethod.Invoke(null, new object[] { model });
    }
}