Мне нужно десериализовать классы, созданные на разных машинах.
Программы очень похожи, но имеют различия в названии программы, а также в версии .Net и т. Д.
Этот код ниже работает довольнону, за исключением случаев, когда у меня есть очередь в моем классе. Я не могу выполнить поиск в существующих сборках, чтобы найти что-то подходящее.
public override Type BindToType(string assemblyName, string typeName)
{
string typeSearchString;// = typeName.Split('+')[1];
try
{
typeSearchString = typeName.Split('+')[1];
}
catch
{
var parts = typeName.Split(new string[] { "[[" }, StringSplitOptions.RemoveEmptyEntries)[1].Split(',');
typeSearchString = @"System.Collections.Generic.Queue"; //This does NOT find Queue<Double> but it does find something else which gives an error
}
Type tyType = null;
string sShortAssemblyName = assemblyName.Split(',')[0];
System.Reflection.Assembly[] ayAssemblies = AppDomain.CurrentDomain.GetAssemblies();
foreach (System.Reflection.Assembly ayAssembly in ayAssemblies)
{
foreach (Type type in ayAssembly.GetTypes())
{
if (type.FullName.Contains(typeSearchString))
{
tyType = ayAssembly.GetType(type.FullName);
return tyType;
}
}
}
return tyType;
}
РЕДАКТИРОВАТЬ 1
Это то, из чего я должен создать поиск:
typeName = "System.Collections.Generic.Queue`1[[System.Double, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"