Fehlerbehandlung bzw. Verhalten im Ctor1?



  • Hallo Leute,

    ich nehmen wir an ich Serialiere eine Objekt welches eine Dictionary enhält. Und Speichere diese als XML!

    Dann verändere ich die XML so, dass es Elemente mit dem gleichen "Schlüssel" gibt!

    Und nun Deserialisiere ich die Daten wieder!

    Problem:

    [Serializable]
        public class Foo : ISerializable
        {
            private readonly Dictionary <string,Bar> _data;
    
            public Foo(string text)
            {
               _data = new Dictionary <string,Bar>();
            }
    
            protected Book(SerializationInfo info, StreamingContext context)
            {
                if (info == null)
                    throw new ArgumentNullException("info");
    
    //BOOOOM!!!
                _data = info.GetValue("Data", typeof(Dictionary<string,Bar>));
            }
    ...
    }
    

    wie geht man damit um?? Fehlerbehandlung im Ctor ist ja nicht Sinn der Sache odER?

    Grüßle



  • Sorry nochmal richtiger code 🤡

    [Serializable] 
        public class Foo : ISerializable 
        { 
            private readonly Dictionary <string,Bar> _data; 
    
            public Foo() 
            { 
               _data = new Dictionary <string,Bar>(); 
            } 
    
            protected Foo(SerializationInfo info, StreamingContext context) 
            { 
                if (info == null) 
                    throw new ArgumentNullException("info"); 
    
    //BOOOOM!!! 
                _data = info.GetValue("Data", typeof(Dictionary<string,Bar>)); 
            } 
    ...
    

    }



  • Bist du sicher, dass du von Xml-Serialisierung redest? Denn das Dictionary<TKey, TValue> ist nicht Xml-serialisierbar.

    Wie man jedoch allgemein damit umgeht ist doch ganz einfach. - Wenn das Deserialisieren fehlschlägt, wird ein Initial-Wert gesetzt und dem Nutzer angezeigt dass das Laden fehlschlug.



  • Hallo inflames2k,

    danke für deine Antwort. Ich habe ein xml-formatter implementiert der das kann,
    nun frage ich mich wie ich in so nem Fall umgehen soll!

    Und mit initialwert meist du "null"? Dadurch das er im Ctor auf die schnauze fliegt, wird die Instance ja veworfen.. ! Tut mir leid, wenn diese wieder eine dummy Frage is;) :p



  • Nun,

    wenn du einen Formatter geschrieben hast, der die Xml-Datei quasi ausliest musst du doch nur aufpassen, dass du einen Key nicht mehrfach ins Dictionary einfügst. - Ist ein Key bereits enthalten wird er übersprungen.



  • Danke, glaub so mach ich das jetzt auch;)


Log in to reply