如何将类名传递给DeserializeObject,我将在运行时在字符串C#中获得它

时间:2018-11-11 18:22:47

标签: 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(header);

    var test = JsonConvert.DeserializeObject<classtype>(msg);
  

我想将类类型传递给方法DeserializeObject,该方法将在运行时获取。

但是参数是通用的,我可能会得到ClassA or ClassB or ClassC,那么如何调用方法并将传递的通用类名传递给字符串值?

readdata("ClassA" , "testmessage");

1 个答案:

答案 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");

建议阅读以下Type.GetType(“namespace.a.b.ClassName”) returns null