Brian's ответ хорошо работает, если тип находится в той же самой сборке, что и вызов (например, GreyCloud указал в одном из комментариев). Итак, если тип находится в другой сборке, вам нужно использовать AssemblyQualifiedName, как указал GreyCloud.
Однако, поскольку AssemblyQualifiedName сохраняет версию, если ваши сборки имеют другую версию, отличную от той, в которой у вас есть тип, это не сработает.
В моем случае это был вопрос, и я решил ее так:
string typeName = typeof (MyClass).FullName;
Type type = GetTypeFrom(typeName);
object myInstance = Activator.CreateInstance(type);
GetTypeFrom Метод
private Type GetTypeFrom(string valueType)
{
var type = Type.GetType(valueType);
if (type != null)
return type;
try
{
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
//To speed things up, we check first in the already loaded assemblies.
foreach (var assembly in assemblies)
{
type = assembly.GetType(valueType);
if (type != null)
break;
}
if (type != null)
return type;
var loadedAssemblies = assemblies.ToList();
foreach (var loadedAssembly in assemblies)
{
foreach (AssemblyName referencedAssemblyName in loadedAssembly.GetReferencedAssemblies())
{
var found = loadedAssemblies.All(x => x.GetName() != referencedAssemblyName);
if (!found)
{
try
{
var referencedAssembly = Assembly.Load(referencedAssemblyName);
type = referencedAssembly.GetType(valueType);
if (type != null)
break;
loadedAssemblies.Add(referencedAssembly);
}
catch
{
//We will ignore this, because the Type might still be in one of the other Assemblies.
}
}
}
}
}
catch(Exception exception)
{
//throw my custom exception
}
if (type == null)
{
//throw my custom exception.
}
return type;
}
Я отправляю это в случае, если кто нуждается в этом.
Зачем сериализовать тип? Если десериализация не является .Net, она не может ее использовать, если это то, что вам нужно передать, это полное имя. – Keith 2008-08-15 14:48:08
Этот точный код вызывает исключение в .net 6.1: произошла ошибка, генерирующая XML-документ. System.RuntimeType недоступен из-за уровня защиты. Могут обрабатываться только общедоступные типы. – YMC 2017-01-11 02:00:08