Autor |
Beitrag |
C#
      
Beiträge: 561
Erhaltene Danke: 65
Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
|
Verfasst: 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.
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| public void SaveData() { XmlSerializer serializer = new XmlSerializer(typeof(Options)); 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:
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
      

Beiträge: 4799
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: 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
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: 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# 
      
Beiträge: 561
Erhaltene Danke: 65
Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
|
Verfasst: Do 19.01.12 17:51
_________________ Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
|
|
C# 
      
Beiträge: 561
Erhaltene Danke: 65
Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
|
Verfasst: Do 19.01.12 18:21
Ich habe das Problem gerade gelöst. Scheinbar kann man die Klasse "IPAddress" nicht serialisieren...
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
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Do 19.01.12 18:50
IPAddress hat keinen Standardkonstruktor (parameterlos). Der ist notwendig beim deserialisieren.
|
|
|