2012-10-04 6 views
7

के नामस्थान को बदलने के बाद बाइनरीफॉर्मेटर के साथ deserialize नहीं कर सकते हैं मेरी कक्षा के नामस्थान को बदलने के बाद मैं वस्तुओं को deserialize नहीं कर सकता। मैंने SerializationBinder लागू किया है। उदाहरण:कक्षा

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

बिल्कुल यकीन नहीं है कि आप किस बारे में बात कर रहे हैं। मैंने जो कुछ किया वह मेरे डेटाबेस क्लास को मेरी परियोजना से बाहर और अपनी परियोजना में ले जाया गया था। जहां तक ​​मुझे पता है कि एकमात्र चीज बदल गई है नामस्थान था। –

उत्तर

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

धन्यवाद ... हाँ मैंने अंततः इसे समझ लिया लेकिन आप सही हैं मैंने असेंबली नाम को प्रतिस्थापित नहीं किया है। आपकी सहायता के लिए एक बार फिर से धन्यवाद। –