我使用SerializationBinder
在類型名稱更改的情況下綁定到當前類型。因此,我有一個將舊類型名稱綁定到新名稱的字典。通用類型名稱的格式SerializationBinder
dict.Add("Old.Namespace.OldTypeName", "New.Namespace.NewName");
我可以用這個字典來獲取類型的SerializationBinder
的Type BindToType(string assemblyName, string typeName)
方法。如果這種類型在泛型中使用,我還必須找到新類型的泛型。 This answer解釋瞭如何爲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,"
檢測泛型類型?
這是我在大多數類型中看到的,但是後來我得到了這個:'System.Collections。ObjectModel.ObservableCollection \'1 + SimpleMonitor [[MyNS.MyClass,MyAssembly,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]]'。你知道這個'SimpleMonitor'部件是什麼嗎? – hansmaad
這是一個嵌套類型。這意味着在另一個類型中定義的類型,就像你做了'class ObservableCollection {public class SimpleMonitor {}}'。所以「加號」意味着嵌套類型。 –