Laden...

Serialisierung eines Members, dessen Typ sich geändert hat: Object of type cannot be converted to...

Erstellt von esskar vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.250 Views
esskar Themenstarter:in
203 Beiträge seit 2006
vor 13 Jahren
Serialisierung eines Members, dessen Typ sich geändert hat: Object of type cannot be converted to...

Hallo,

ich hab hier ein Projekt von nem ehemaligen Kollegen umgestellt, ein Member ist jetzt kein Dictionary<string, List<string>> mehr, sondern ein Dictionary<string, HybridSet<string>>

HybridSet<> ist eine Klasse von mir.

Nun kann man die Klasse mit eben diesem Member auch serialisieren.
Problem nun: es gibt eben alte Serialisiereungen, die sich natürlich mit der neuen Definition beißen:

Object of type 'System.Collections.Generic.Dictionary2[System.String,System.Collections.Generic.List1[System.String]]' cannot be converted to type 'System.Collections.Generic.Dictionary2[System.String,Collections.Generic.HybridSet1[System.String]]'.

kann ich das irgendwie mit einem Typconverter lösen?

nachtrag: ich hab schon mit operatoren überladungen rumprobiert, aber es scheint es nicht zu tun.

esskar Themenstarter:in
203 Beiträge seit 2006
vor 13 Jahren

wie sooft geb ich mir die antwort selbst:
Haber System.Runtime.Serialization.SerializationBinder gefunden (siehe Overriding Assembly / Type information auf http://www.diranieh.com/NETSerialization/BinarySerialization.htm#Advanced%20Serialization)
Denke mal, das wird mir weiter Helfen.

esskar Themenstarter:in
203 Beiträge seit 2006
vor 13 Jahren

hmm, so ganz einfach ist es nun doch nicht
hab jetzt folgendes


public class TabModelPersistenceHelperBinder : System.Runtime.Serialization.SerializationBinder
    {
        public override Type BindToType(string assemblyName, string typeName)
        {
            Type retval = Type.GetType(String.Format("{0}, {1}", typeName, assemblyName));
            if(retval.Equals(typeof(Dictionary<string, List<string>>)))
                retval = typeof(Dictionary<string, HybridSet<string>>);
            return retval;
        }        
    }

werde auch auf gerufen, jedoch wird jetzt die Exception geworden, dass IConvertible implementiert werden muss.
Leider kann ich ja Dictionary<string, List<string>> nicht mehr von Iconvertible ableiten.
Gibts noch andere ideen?

esskar Themenstarter:in
203 Beiträge seit 2006
vor 13 Jahren

ah, man muss doch noch bissle mehr tun


public class TabModelPersistenceHelperBinder : System.Runtime.Serialization.SerializationBinder
    {
        public override Type BindToType(string assemblyName, string typeName)
        {
            Type retval = Type.GetType(String.Format("{0}, {1}", typeName, assemblyName));
            if(retval.Equals(typeof(Dictionary<string, List<string>>)))
                retval = typeof(Dictionary<string, HybridSet<string>>);
            else if(retval.Equals(typeof(KeyValuePair<string, List<string>>)))
                retval = typeof(KeyValuePair<string, HybridSet<string>>);
            else if (retval.Equals(typeof(List<string>)))
                retval = typeof(HybridSet<string>);
            return retval;
        }        
    }