如何将 class 名称传递给 DeserializeObject,我将在运行时在字符串 c# 中获取该名称
How to pass class name to DeserializeObject which i will get at runtime in string c#
我必须调用下面的方法,它有 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);
i want to pass classtype to method DeserializeObject which i will get at runtime.
但参数是通用的,我可能会得到 ClassA or ClassB or ClassC
那么我如何调用方法并传递通用的 class 名称,我将其转换为字符串值?
readdata("ClassA" , "testmessage");
不确定您在尝试什么,但这不应该起作用:
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");
建议阅读以下内容Type.GetType(“namespace.a.b.ClassName”) returns null
我必须调用下面的方法,它有 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);
i want to pass classtype to method DeserializeObject which i will get at runtime.
但参数是通用的,我可能会得到 ClassA or ClassB or ClassC
那么我如何调用方法并传递通用的 class 名称,我将其转换为字符串值?
readdata("ClassA" , "testmessage");
不确定您在尝试什么,但这不应该起作用:
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");
建议阅读以下内容Type.GetType(“namespace.a.b.ClassName”) returns null