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