C# 使用System.Type as<;T>;在运行时使用Json.Net反序列化时

C# 使用System.Type as<;T>;在运行时使用Json.Net反序列化时,c#,.net,generics,json.net,C#,.net,Generics,Json.net,我有一个进程,需要能够以以下方式调用函数 public static Task<string> Convert(string payload, Type type) { JsonSerializerSettings settings = new JsonSerializerSettings().Configure();//<--- Pull in extension methods to handle custom types return JsonConver

我有一个进程,需要能够以以下方式调用函数

public static Task<string> Convert(string payload, Type type)
{
    JsonSerializerSettings settings = new JsonSerializerSettings().Configure();//<--- Pull in extension methods to handle custom types
    return JsonConvert.SerializeObject(JsonConvert.DeserializeObject<type>(payload), settings));
}
存在具有相同名称的重载非泛型和泛型重载,并且方法表查找失败。我可以通过调用类似于下面的函数(无歧义)来绕过这个问题

public static string Convert(string payload, Type type)
{
    JsonSerializerSettings settings = new JsonSerializerSettings().Configure();
    //This clashes with another overload of DeserializeObject in the method table
    MethodInfo method = typeof(TestConverter).GetMethod("TestThis", new[] { typeof(string) });
    method = method.MakeGenericMethod(type);
    object[] arguments = new object[1];
    arguments[0] = payload;
    string result = (string)method.Invoke(null, arguments);

    return JsonConvert.SerializeObject(result, settings);
}

public static T TestThis<T>(string s)
{
    return JsonConvert.DeserializeObject<T>(s);
}
但是,我的练习是使用
JsonConvert.DeserializeObject(payload)
重载,以便调用我的转换器


有什么建议吗?

你不需要跳圈。具有接受
类型的非泛型

public static Task<string> Convert(string payload, Type type)
{
    JsonSerializerSettings settings = new JsonSerializerSettings().Configure();//<--- Pull in extension methods to handle custom types
    return JsonConvert.SerializeObject(JsonConvert.DeserializeObject(payload, type), settings));
}
公共静态任务转换(字符串有效负载,类型)
{

JsonSerializerSettings settings=new JsonSerializerSettings().Configure();//您尝试过这个重载吗?@Aybe-我没有尝试过,但是,它看起来很有趣。我回家后会尝试。谢谢。
object result = JsonConvert.DeserializeObject(payload);
public static Task<string> Convert(string payload, Type type)
{
    JsonSerializerSettings settings = new JsonSerializerSettings().Configure();//<--- Pull in extension methods to handle custom types
    return JsonConvert.SerializeObject(JsonConvert.DeserializeObject(payload, type), settings));
}