如何将 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