如何根据队列中的类名信息动态实例化对应类的对象?
动态实例化队列中的类对象
我有一个存储类对象JSON字符串的队列,希望取出队列里的所有元素,将它们动态实例化为对应类的新对象。直接按字面逻辑无法实现,但可以通过反射获取类型+动态反序列化的思路批量执行,具体代码示例如下:
// queueModel:存储原始类对象JSON字符串的队列 // 每个JSON对象包含"OriginalClassName"属性,存储对应类的完整名称(需包含命名空间) // 目标类已提前定义好,可用于实例化 string className; object obj = null; do { var jObject = JObject.Parse(queueModel.Peek()); className = jObject["OriginalClassName"].ToString(); // 关键:通过反射获取目标类型 Type targetType = Type.GetType(className); // 动态反序列化为对应类型的对象 obj = JsonConvert.DeserializeObject(queueModel.Dequeue(), targetType); // 手动指定类型的写法(对比参考) // SomeClass obj = JsonConvert.DeserializeObject<SomeClass>(queueModel.Dequeue()); } while (queueModel.Count != 0);
关键注意点:
- 必须确保
className是类的完整名称(包含命名空间,比如MyNamespace.SomeClass),否则Type.GetType会返回null - 如果目标类不在当前程序集,需要改用
Assembly.GetType或指定程序集加载类型 - 反序列化后的对象是
object类型,后续若需调用类的特定方法/属性,需进行类型转换或使用dynamic类型
内容的提问来源于stack exchange,提问作者Decors
相关产品推荐
相关产品推荐

