我必须调用以下具有2个参数的方法
public static byte[] readdata(string classtype, string msg)
{
Encoding encoding = new System.Text.UTF8Encoding();
string header = $"{classtype},{Guid.NewGuid().ToString()}";
byte[] headerBytes = Encoding.UTF8.GetBytes(header);
var test = JsonConvert.DeserializeObject<classtype>(msg);
我想将类类型传递给方法DeserializeObject,该方法将在运行时获取。
但是参数是通用的,我可能会得到ClassA or ClassB or ClassC
,那么如何调用方法并将传递的通用类名传递给字符串值?
readdata("ClassA" , "testmessage");
答案 0 :(得分:2)
不确定您要尝试什么,但不应该这样做:
readdata(nameof(ClassA), "");
readdata(nameof(ClassB), "");
...
您可以使用以下重载JsonConvert.DeserializeObject
var test = JsonConvert.DeserializeObject(msg, Type.GetType("namespace.qualified.ClassA"));
假设您要传递通用类型参数-您可以尝试以下操作:
public static void readdata(string classtype, string msg)
{
///... your stuff
}
static void SendType<T>()
{
readdata(typeof(T).Name, "");
}
static void Main(string[] args)
{
SendType<ClassA>();
SendType<ClassB>();
SendType<ClassC>();
}
但是我不确定上述方法是否仍然可以解决您的问题,您应该尝试:
public static byte[] readdata<T>(string msg)
{
//Your code
var test = JsonConvert.DeserializeObject<T>(msg);
}
通话说明:
readdata<ClassA>("Some message");
readdata<ClassB>("Some message");
readdata<ClassC>("Some message");