2012-10-04 12 views
7

クラスの名前空間を変更した後、オブジェクトを逆シリアル化できなくなりました。私はSerializationBinderを実装しました。例:クラスの名前空間を変更した後にbinaryFormatterで逆シリアル化できません

public class TypeNameConverter : SerializationBinder 
{ 
    public override Type BindToType(string assemblyName, string typeName) 
    { 
     typeName = typeName.Replace("MyOldNamespace", "MyNewNamespace"); 
     return Type.GetType(string.Format("{0}, {1}", typeName, assemblyName)); 
    } 
} 

BinaryFormatter bf = new BinaryFormatter(); 
bf.Binder = new TypeNameConverter(); 

私が手に例外がある:

は 'System.Runtime.Serialization.TypeLoadExceptionHolder' 型に変換することができません 'MyNewNamespace.MyClass'

+0

アセンブリ内の名前空間も変更する必要がありますか。 – d89761

+0

あなたが何を話しているのか正確にはわかりません。私のやったことは、私のdataBaseクラスを自分のプロジェクトから移動して、それ自身のプロジェクトにすることでした。私が知っている限り、変更されたのは名前空間だけでした。 –

答えて

12

あなたは交換し忘れましたアセンブリ名:

class TypeNameConverter : SerializationBinder 
{ 
    public override Type BindToType(string assemblyName, string typeName) 
    { 
     typeName = typeName.Replace("MyOldNamespace", "MyNewNamespace"); 
     assemblyName = assemblyName.Replace("MyOldNamespace", "MyNewNamespace"); 
     return Type.GetType(string.Format("{0}, {1}", typeName, assemblyName)); 
    } 
} 
+0

ありがとう...ええ、私は結局それを理解しましたが、あなたが正しいです、私はアセンブリ名を置き換えませんでした。もう一度あなたの助けに感謝します。 –

関連する問題