2012-10-04 28 views
7

Sau khi thay đổi không gian tên của lớp tôi không còn có thể deserialize các đối tượng. Tôi đã triển khai SerializationBinder. Ví dụ:Không thể deserialize với binaryFormatter sau khi thay đổi không gian tên của lớp

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(); 

Ngoại lệ tôi nhận được là:

'System.Runtime.Serialization.TypeLoadExceptionHolder' không thể được chuyển đổi sang loại 'MyNewNamespace.MyClass'

+0

Bạn có cần phải thay đổi không gian tên trong hội đồng không? – d89761

+0

không chắc chắn chính xác những gì bạn đang nói đến. tất cả những gì tôi làm là di chuyển lớp dataBase ra khỏi dự án của mình và vào dự án riêng của nó. theo như tôi biết điều duy nhất đã thay đổi là không gian tên. –

Trả lời

12

bạn quên để thay thế tên lắp ráp:

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

cảm ơn ... vâng tôi cuối cùng đã tìm ra nhưng bạn nói đúng Tôi đã không thay thế tên lắp ráp. Cảm ơn một lần nữa vì sự giúp đỡ của bạn. –

Các vấn đề liên quan