Autor Beitrag
C#
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: Mi 18.01.12 22:29 
Hallo,

ich habe eine Methode in der ein XMLSerializer erzeugt wird der dann eine Klasse serialisieren soll. Jedoch wenn ich ihn instanziiere beendet überspringt das Programm einfach den Rest der Methode ohne irgendwelche Fehler zu melden.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
     public void SaveData()
        {
            XmlSerializer serializer = new XmlSerializer(typeof(Options)); //Danach springt das Programm einfach zurück. Nächster Schritt wird NICHT ausgeführt
            XmlWriterSettings settings = new XmlWriterSettings
            {
                Indent = true,
                IndentChars = "\t"
            };
            XmlWriter writer = XmlWriter.Create("Data.xml", settings);
            serializer.Serialize(writer, this);
            writer.Close();
        }

von hier wird SaveData() aufgerufen:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
        private void HandleFirstLaunch()
        {
            FolderBrowserDialog dialog = new FolderBrowserDialog
            {
                SelectedPath = ROOT + @"Data\",
                Description = "Wähle den Ordner, unter dem die Daten gespeichert werden sollen.",
            };
            DialogResult res = dialog.ShowDialog();
            if (res != DialogResult.OK) Close();
            manager.options.SavePath = dialog.SelectedPath;
          manager.SaveData();
        }

Und diese Methode wird von Form_Load() aufgerufen, welche dann ebenfalls übersprungen wird.
Hat jemand eine Lösung??

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4799
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 19.01.12 12:00 
Hallo C#,

ich denke, da passen Quellcode und EXE nicht zueinander. Mach mal ein "Rebuild All" bzw. schau, ob du wirklich die richtige C#-Datei editierst...
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 19.01.12 12:09 
Vermutlich wird eine Exception geworfen die du fangen und auswerten solltest. Form schluckt Exceptions im Load Event wenn man die nicht selbst behandelt.

Edit: Übrigens scheinst du im Load Event an irgendwelchen anderen Dialogen rumzuspielen (hier FolderBrowserDialog). Ganze schlechte Idee. Im Load Event ist der Besitzer des Focus eher undefiniert (die vorherige Form oder die jetzt gerade in Entstehung befindliche Form) und du kommst mit einem Dialog dazwischen der auch den Focus will. Ich vermute dein gezeigter Code wäre besser im Shown Event aufgehoben als in Load. Wenn man solchen Code schon in der Form unterbringt ist Shown eh meist der geeignetere Event.
C# Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: Do 19.01.12 17:51 
Ok ich habs jetzt in die Shown() Mehtode gepackt, da erhalte ich beim erzeugen des Serializer (1. Zeile, 1. Post) die Fehlermeldung: "Fehler beim Refrektieren des Typs Options"
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
    public class Options
        {
            public string SavePath { get; set; }
            public string Name { get; set; }
            //public string Password { get; set; }
            public List<FileInfo> FileInfos { get; set; }
            public List<UserData> UserData { get; set; }
        }

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
 public class FileInfo
    {
        public string Name { get; set; }
        public string Path { get; set; }
        public string Comment { get; set; }
    }

    public struct UserData
    {
        public string Name { get; set; }
        public IPAddress Ip { get; set; }
    }

Woran kann das liegen?

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
C# Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: Do 19.01.12 18:21 
Ich habe das Problem gerade gelöst. Scheinbar kann man die Klasse "IPAddress" nicht serialisieren...
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
    public struct UserData
    {
        public string Name { get; set; }
        public IPAddress Ip { get; set; }
    }

Hab statt IPAddress jetzt einfach string genommen und jetzt geht es auch...

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 19.01.12 18:50 
IPAddress hat keinen Standardkonstruktor (parameterlos). Der ist notwendig beim deserialisieren.