Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

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

Avatar #avatar-2885.jpg


Dabei seit:
Beiträge: 203
Herkunft: Dubai

Themenstarter:

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

beantworten | zitieren | melden

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:
Zitat
Object of type 'System.Collections.Generic.Dictionary`2[System.String,System.Collections.Generic.List`1[System.String]]' cannot be converted to type 'System.Collections.Generic.Dictionary`2[System.String,Collections.Generic.HybridSet`1[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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von esskar am .
private Nachricht | Beiträge des Benutzers
esskar
myCSharp.de - Member

Avatar #avatar-2885.jpg


Dabei seit:
Beiträge: 203
Herkunft: Dubai

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
esskar
myCSharp.de - Member

Avatar #avatar-2885.jpg


Dabei seit:
Beiträge: 203
Herkunft: Dubai

Themenstarter:

beantworten | zitieren | melden

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?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von esskar am .
private Nachricht | Beiträge des Benutzers
esskar
myCSharp.de - Member

Avatar #avatar-2885.jpg


Dabei seit:
Beiträge: 203
Herkunft: Dubai

Themenstarter:

beantworten | zitieren | melden

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;
        }        
    }
private Nachricht | Beiträge des Benutzers