c# - 如何将类名传递给 DeserializeObject,我将在运行时以字符串 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);
我想将类类型传递给我将在运行时获得的方法 DeserializeObject。
但是参数是通用的,我可能会得到ClassA or ClassB or ClassC
,所以我如何调用方法并将通用类名传递给我将其转换为字符串值?
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");
推荐阅读
- javascript - 是否可以连接方法,如排序。shift、pop、push 和 unshift
- spring-boot - JPA @PostUpdate 监听回调方法可以异步执行吗?
- amazon-web-services - Outbond 规则哪个目的地是它本身?
- java - 如何在 Java 中简化印度地区的字符串?(问题扩展)
- splunk - Splunk : 在 splunk 中查找前 1000 名的百分比
- javascript - 角度的多个过滤器
- google-cloud-platform - Datastore 的实体与 GCP Firestore 的文档
- reactjs - material-ui theme.palette.primary.light 有什么作用?
- javascript - 为什么找不到我包含的包裹?
- symfony - 即使主图像存储在 S3 上,Sulu 图像格式变体也始终存储在本地