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

C# 获取要传递给接受泛型的方法的对象类型,c#,asp.net-mvc-3,generics,C#,Asp.net Mvc 3,Generics,我只能用伪代码编写,因为我不知道正确的语法。。如果有的话 我有一个要调用的方法: JsonConvert.DeserializeObject<Type>(string value); 我以后需要有我的类型,这样我就可以使用DataContractSerializer来存储它 如果您在编译时不知道该类型,则必须使用反射API来调用该方法 这一点以前已经回答过,请参见示例。您可以使用该方法。它有一个重载,该重载接受类型的程序集限定名称的字符串,并返回相应的类型 您的代码如下所示: pu

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

我有一个要调用的方法:

JsonConvert.DeserializeObject<Type>(string value);
我以后需要有我的类型,这样我就可以使用DataContractSerializer来存储它


如果您在编译时不知道该类型,则必须使用反射API来调用该方法

这一点以前已经回答过,请参见示例。

您可以使用该方法。它有一个重载,该重载接受类型的程序集限定名称的
字符串
,并返回相应的
类型

您的代码如下所示:

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 });
    }
}

我必须使用
GetMethods()
循环遍历这些方法,以避免出现不明确的匹配异常,最后一行应该是
var deserializedObject=invocableMethod.Invoke(null,new object[]{model})。尽管如此,还是让它工作了,非常感谢!!由于有两个反序列化对象方法,一个是泛型的,另一个不是泛型的,因此运行代码会导致异常“找到不明确的匹配”。相反,您可以尝试调用接受value和type var method=typeof(JsonConvert).GetMethod的方法(“反序列化对象”,new[]{typeof(string),typeof(type)});                         var command=method.Invoke(null,新对象[]{json,contentType})@wonster虽然我希望使用通用方法,但thanksI真的不知道如何准确地表达我所寻找的内容,所以我找不到以前的示例。链接非常有用。。。谢谢可能重复的
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 });
    }
}