如何使用类名字符串获取类名/类型?像
Dictionary<string, string> DFields = GetFields();
类型是
Dictionary<string, string>
object = Deserialize<?>(_stream)
理想情况下,我在想:
object = Deserialize<"Dictionary<string, string>">(_stream)
它应该成为
object = Deserialize<Dictionary<string, string>>(_stream)
为了工作。我像10对象一样序列化,但我只有字符串格式的类型名。我需要将字符串格式格式化为实际类型,以便将其提供给通用序列化器反序列化器函数。
步骤1-获取类型实例:
您需要使用传递到Type.GetType()
中的程序集限定名称。通过在Dictionary()类型的实例上调用GetType().AssemblyQualifiedName
进行快速测试,结果是:
System.Collections.Generic.DDictionary `2[[System.String,mscorlib,Version=4.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089],[SystemString,mscolleib,Version=4.0.0.0,Culture=neural,PublicKeyToken=b 77a5c561534e089]],mscorllib,Version=40.0.0,Culture=neutral
真是一团糟。我相信你可以删除大部分,但它仍然有效:
System.Collections.Generic.Dictionary `2[[System.String,mscorlib],[System.String,mscorlib]],mscorlb
因此:
var typeName = "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.String, mscorlib]], mscorlib";
var type = Type.GetType( typeName );
步骤2(假设API强制使用一个通用参数,IMO是垃圾)-使用反射动态参数化通用方法:
var genericMethod = typeof(Serialzier).GetMethod( "Deserializer" );
var parametizedMethod = genericMethod.MakeGenericMethod( type );
var parameters = new object[] { _stream };
var deserializedInstance = parametizedMethod.Invoke( null, parameters );