Hallo.
Und zwar habe ich eine List(of Figur). Die Klasse Figur sieht so aus:
Mein Ziel: Diese List(of Figur) in einer Datei serialisiert abzulegen, um
so ein Speichern/Laden zu ermöglichen.
Meine Klasse zum Speichern und Laden sieht derzeit so aus:
Das Klassenkonstrukt, in dem ich dieses Laden/Speichern verwenden möchte, fängt
wie folgt an:
Jedes Mal wenn ich Debuggen möchte, schmiert das Programm direkt ab.
Sofern ich diese Zeilen hier auskommentiere:
kann ich es wieder starten. Also muss es an der Serialisierung liegen.
Fehler:
Kann mir jemand vielleicht helfen?
Und zwar habe ich eine List(of Figur). Die Klasse Figur sieht so aus:
C#-Quellcode
- using System;
- using System.Drawing;
- namespace FigurenBibliothek
- {
- /// <summary>
- /// Zeichenbare 2D Figur
- /// </summary>
- [Serializable]
- public abstract class Figur : Punkt
- {
- // Konstruktoren
- public Figur(Punkt pos) : base(pos.X, pos.Y) {
- // VOID
- }
- // Methoden
- public abstract void Zeichnen(Graphics g);
- public abstract float FlaecheBerechnen();
- public abstract float GetBreite();
- public abstract float GetHoehe();
- public virtual bool Treffer(Punkt position) {
- return
- position.X >= X && position.X <= X + GetBreite() &&
- position.Y >= Y && position.Y <= Y + GetHoehe();
- }
- }
- }
Mein Ziel: Diese List(of Figur) in einer Datei serialisiert abzulegen, um
so ein Speichern/Laden zu ermöglichen.
Meine Klasse zum Speichern und Laden sieht derzeit so aus:
C#-Quellcode
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Runtime.Serialization;
- using System.Runtime.Serialization.Formatters.Binary;
- using System.Text;
- namespace FigurenBibliothek
- {
- [Serializable]
- public class LoadOrSave
- {
- [Serializable]
- public class DrawingObject
- {
- public List<Figur> figuren;
- }
- public static List<Figur> LoadOrSaveIt(List<Figur> items)
- {
- IFormatter formatter = new BinaryFormatter();
- String fileToReadFrom = "Drawing.cool";
- List<Figur> toReturn = new List<Figur>();
- if (!File.Exists(fileToReadFrom))
- {
- File.Create(fileToReadFrom);
- }
- Stream stream = new FileStream(fileToReadFrom, FileMode.Open, FileAccess.Read, FileShare.Read);
- if (items != null)
- {
- DrawingObject dataToSave = new DrawingObject();
- dataToSave.figuren = items;
- formatter.Serialize(stream, dataToSave);
- stream.Close();
- return toReturn;
- }
- if (stream != null)
- {
- DrawingObject toReadFrom = (DrawingObject)formatter.Deserialize(stream);
- toReturn = toReadFrom.figuren;
- }
- stream.Close();
- return toReturn;
- }
- }
- }
Das Klassenkonstrukt, in dem ich dieses Laden/Speichern verwenden möchte, fängt
wie folgt an:
C#-Quellcode
- using FigurenBibliothek;
- using System;
- using System.Collections.Generic;
- using System.Drawing;
- using System.IO;
- using System.Runtime.Serialization;
- using System.Runtime.Serialization.Formatters.Binary;
- using System.Windows.Forms;
- namespace FigurenBibliothek
- {
- public partial class AppForm : Form
- {
- private List<Figur> figuren = new List<Figur>(); // leere Liste
- private Punkt mausPunkt = null;
- private Punkt figurPunkt = null;
- private Figur trefferFigur = null;
- public AppForm(Figur[] figuren) {
- this.figuren.Clear();
- this.figuren.AddRange(figuren);
- InitializeComponent();
- this.DoubleBuffered = true;
- }
- private void AppForm_Paint(object sender, PaintEventArgs e) {
- List<Figur> items = LoadOrSave.LoadOrSaveIt(null);
- if (items != null)
- {
- figuren.Clear();
- figuren.AddRange(items);
- }
- foreach (Figur figur in figuren) {
- figur.Zeichnen(e.Graphics);
- }
- }
Jedes Mal wenn ich Debuggen möchte, schmiert das Programm direkt ab.
Sofern ich diese Zeilen hier auskommentiere:
kann ich es wieder starten. Also muss es an der Serialisierung liegen.
Fehler:
Kann mir jemand vielleicht helfen?