C# 如何将类名传递给反序列化对象,我将在运行时以字符串c获取该对象#

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

我必须调用下面有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);

不确定您正在尝试什么,但不应该这样做:

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-如果你只有一个城市的名称,你能找到一个地址吗?我认为你做错了什么。