如果类型名称发生更改,我正在使用 aSerializationBinder
绑定到当前类型。因此,我有一个将旧类型名称绑定到新名称的字典。
dict.Add("Old.Namespace.OldTypeName", "New.Namespace.NewName");
我可以使用这本字典来获取Type BindToType(string assemblyName, string typeName)
. SerializationBinder
如果这个类型用在泛型类型中,我还必须找到泛型的新类型。这个答案解释了如何为List<T>
. 我想知道是否有通用类型名称的标准化格式,以便我可以使用某种正则表达式来获取所有类型的泛型的新类型。
public class TypeDictionary
{
private Dictionary<string, Type> bindings_ =
new Dictionary<string, Type>();
public void AddBinding(string oldTypeString, Type newType)
{
bindings_.Add(oldTypeString, newType);
}
public Type NewType(string oldTypeString)
{
// How should this be implemented:
if (IsGeneric(oldTypeString))
return NewGenericType(oldTypeString);
Type newType;
if (bindings_.TryGetValue(oldTypeString, out newType))
return newType;
return null;
}
}
到目前为止我见过的大多数字符串都是List<T>
这样的
Namespace.TypeName`1[[MyAssembly.MyClass, MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]
只寻找"[[MyAssembly.MyClass,"
检测通用类型是否可以节省?