SerializationBinder
タイプ名が変更された場合に備えて、現在のタイプにバインドするためにa を使用しています。したがって、古い型名を新しい名前にバインドする辞書があります。
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,"
ジェネリック型を検出するために探すだけで保存できますか?