Шаг 1 - Получить экземпляр типа:
Необходимо использовать полное имя сборки, переданное в Type.GetType()
.При быстром тестировании путем вызова GetType().AssemblyQualifiedName
для экземпляра типа Dictionary () получается:
System.Collections.Generic.Dictionary`2 [[System.String, mscorlib, Version= 4.0.0.0, Культура = нейтральный, PublicKeyToken = b77a5c561934e089], [System.String, mscorlib, Версия = 4.0.0.0, Культура = нейтральный, PublicKeyToken = b77a5c561934e089]], mscorlib, Версия = 4.0.0.0, Культура = нейтральный, PublicKeyToken= b77a5c561934e089
довольно беспорядок.Я считаю, что вы можете удалить большую часть из этого, хотя и он все еще будет работать:
System.Collections.Generic.Dictionary`2 [[System.String, mscorlib], [System.String, mscorlib]], mscorlib
для этого:
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 );