使用反射获取类型以提供给泛型类
如何使用类名字符串获取类名/类型?就像
Dictionary<string, string> DFields = GetFields();
理想的类型
Dictionary<string, string>
object = Deserialize<?>(_stream)
一样,我在想:
object = Deserialize<"Dictionary<string, string>">(_stream)
它应该成为
object = Deserialize<Dictionary<string, string>>(_stream)
为了工作。我序列化了 10 个对象,但我只有字符串格式的类型名称。我需要将字符串格式格式化为实际类型,以便我可以将其提供给通用序列化器反序列化器函数。
How do I get the class name/type using the class name string? like
Dictionary<string, string> DFields = GetFields();
the type is
Dictionary<string, string>
object = Deserialize<?>(_stream)
Ideally, I was thinking:
object = Deserialize<"Dictionary<string, string>">(_stream)
It should become
object = Deserialize<Dictionary<string, string>>(_stream)
in order to work. Im serializing like 10 object but I only have the type names in string format. I need to format the string format to actual type so I can feed it to the generic serializer deserializer function.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
第 1 步 - 获取类型实例:
您需要使用传递到
Type.GetType()
的程序集限定名称。通过在 Dictionary() 类型实例上调用
GetType().AssemblyQualifiedName
进行快速测试,结果是:相当混乱。我相信你可以删除其中的大部分,但它仍然有效:
因此:
第 2 步(假设 API 强制使用通用参数,IMO 是狗屎) - 使用动态参数化泛型方法的反射:
Step 1 - Get type instance:
You need to use an assembly qualified name passed into
Type.GetType()
.Doing a quick test by calling
GetType().AssemblyQualifiedName
on a Dictionary() type instance, it turns out to be:quite a mess. I believe you can remove most of it though and it'll still work:
therefor:
Step 2 (assuming the API forces a generic parameter which IMO is shit) - Use reflection to parametize the generic method dynamically: