C# 如何将类名传递给反序列化对象,我将在运行时以字符串c获取该对象#
我必须调用下面有2个参数的方法C# 如何将类名传递给反序列化对象,我将在运行时以字符串c获取该对象#,c#,c#-4.0,C#,C# 4.0,我必须调用下面有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(hea
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);
不确定您正在尝试什么,但不应该这样做:
readdata(nameof(ClassA), "");
readdata(nameof(ClassB), "");
...
您可以使用以下重载
假设您正在传递泛型类型参数-以下是您可以尝试的:
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>();
}
publicstaticvoidreaddata(stringclasstype,stringmsg)
{
///…你的东西
}
静态void SendType()
{
readdata(typeof(T).Name,“”);
}
静态void Main(字符串[]参数)
{
SendType();
SendType();
SendType();
}
但我不确定上述方法是否仍能解决您的问题,您应该尝试:
public static byte[] readdata<T>(string msg)
{
//Your code
var test = JsonConvert.DeserializeObject<T>(msg);
}
公共静态字节[]读取数据(字符串msg)
{
//你的代码
var test=JsonConvert.DeserializeObject(msg);
}
通话声明:
readdata<ClassA>("Some message");
readdata<ClassB>("Some message");
readdata<ClassC>("Some message");
readdata(“一些消息”);
readdata(“某些消息”);
readdata(“某些消息”);
建议阅读以下内容不确定您正在尝试什么,但不应该这样做:
readdata(nameof(ClassA), "");
readdata(nameof(ClassB), "");
...
您可以使用以下重载
假设您正在传递泛型类型参数-以下是您可以尝试的:
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>();
}
publicstaticvoidreaddata(stringclasstype,stringmsg)
{
///…你的东西
}
静态void SendType()
{
readdata(typeof(T).Name,“”);
}
静态void Main(字符串[]参数)
{
SendType();
SendType();
SendType();
}
但我不确定上述方法是否仍能解决您的问题,您应该尝试:
public static byte[] readdata<T>(string msg)
{
//Your code
var test = JsonConvert.DeserializeObject<T>(msg);
}
公共静态字节[]读取数据(字符串msg)
{
//你的代码
var test=JsonConvert.DeserializeObject(msg);
}
通话声明:
readdata<ClassA>("Some message");
readdata<ClassB>("Some message");
readdata<ClassC>("Some message");
readdata(“一些消息”);
readdata(“某些消息”);
readdata(“某些消息”);
建议阅读以下内容您使用了generic标记,那么为什么不使用generic而不是传递字符串呢?当类型
ClassA
在readdata
的范围内时,它可能也在readdata
的调用者的范围内,那么为什么不传递类型而不是字符串呢?如果必须是字符串,可以使用nameof(ClassA)
。要从字符串中获取类型,请查看反射,例如,根据您上次的注释,它可能与您使用的泛型标记重复,因此为什么不使用泛型而不是传递字符串?当类型ClassA
在readdata
的范围内时,它也可能在readdata
的调用者的范围内,那么为什么不传递类型而不是字符串呢?如果必须是字符串,可以使用nameof(ClassA)
。要从字符串中获取类型,请查看反射,例如,根据您的上一条注释,它可能与我不能像readdata那样复制(“某些消息”);因为在运行时,我得到了class name.Type.GetType的值,这对我来说是可行的,但它需要名称空间.qualified.classname
full如果没有指定的完整名称,还有其他方法吗?@Neo-如果你只有一个城市的名称,你能找到一个地址吗?我认为你做错了什么。我不能像这样读数据(“一些信息”);因为在运行时,我得到了class name.Type.GetType的值,这对我来说是可行的,但它需要名称空间.qualified.classname
full如果没有指定的完整名称,还有其他方法吗?@Neo-如果你只有一个城市的名称,你能找到一个地址吗?我认为你做错了什么。