Griffindor01
Cadet 3rd Year
- Registriert
- Feb. 2021
- Beiträge
- 33
Ich mal wieder,
haben nun bei uns im Bezug auf den Unterricht neues Material bekommen, habe einiges alleine hinbekommen, verzweifle aber nun an einem Arbeitsblatt mit dem Titel "Persistenz von Daten", also per Definiton der dauerhaften Speicherung von Daten bzw. Objekten auf einem nichtflüchtigen Speicher-Medium.
In der PDF wurden die Klassen "StreamReader" und "StreamWriter" sowie "XMLSerializer" vorgestellt.
Im Vorhinein habe ich bereits, den Aufgabe nach, ein Adressbuch erstellt mit Personen-Objekten, welche diverse Daten wie Namen, Nachnamen, Adresse (Eigene Klasse) und die Postleitzahl enthalten.
Aufgabe ist nun:
Ergänzen Sie ihr Adressbuch-Projekt so, dass nach dem Programmstart die Prozessdaten gelesen
und bei Programmende geschrieben werden.
Modularisieren Sie diese Funktionalität in geeigneten Methoden der Klasse Program, die Sie
dann bei Bedarf aufrufen (siehe Beispiel-Code).
Soweit ich das verstanden habe, muss ich also zunächst einmal meine Liste mit den Personen-Objekten Serialisieren lassen, also in einer XML-Datei speichern, diese dann einlesen, bei Bedarf verändern und schließlich ausgeben lassen.
Nun mein Problem: Habe genau wie in der PDF beschrieben versucht, den Listen-Container des Typs Person zu Serialisieren, das Programm wird sogar ausgeführt, eine XML-Datei wird erstellt, diese enthält aber keine Angaben über die Objekte sondern ist bis auf die Platzhalter leer:
Aussehen soll das ganze aber beispielhaft so:
Meine Main sieht folgendermaßen aus (Falls ich auch die anderen Klassen senden soll, sagt bitte bescheid:
[/CODE]
class Program
{
static void Main(string[] args)
{
Person Mustermann = new Person();
Person Dieter = new Person("Dieter", "Bohlen", new DateTime(2004, 05, 02), new Adresse("Bohlenweg", "1", "50667", "Köln"));
Person Thomas = new Person("Thomas", "Mustermann", new DateTime(2003, 02, 01), new Adresse("Mehringdamm", "4", "30021", "Berlin"));
Person Franz = new Person("Franz", "Gans", new DateTime(2005, 07, 03), new Adresse("Rosenhof", "5", "64560", "Riedstadt"));
Person Tommy = new Person("Tommy", "Test", new DateTime(1958, 03, 01), new Adresse("Kirchweg", "5", "77765", "Hochstadt"));
personen.Add(Mustermann);
personen.Add(Dieter);
personen.Add(Thomas);
personen.Add(Franz);
personen.Add(Tommy);
Adresse computerbase = new Adresse("Putinweg", "2", "74627", "Internet");
Dieter.addNeueAdresse(computerbase );
XmlSerializer serializer = new XmlSerializer(typeof(List<Person>));
using (StreamWriter writer = new StreamWriter("Adressbuch.xml");
{
serializer.Serialize(writer, personen);
}
foreach (Person person in personen)
{
Console.WriteLine(
person.getVorname() + "\n" +
person.getNachname() + "\n" +
person.getGeburtstag().ToShortDateString() + "\n");
List<Adresse> adressen = person.getAdresseListe();
foreach (Adresse adresse in adressen)
{
Console.WriteLine(adresse.getStrasse());
Console.WriteLine(adresse.getHausnr());
Console.WriteLine(adresse.getPlz());
Console.WriteLine(adresse.getOrt());
Console.WriteLine("");
}
Console.WriteLine("===============");
[/CODE]
Relevant ist hierbei aber eigentlich nur der Serialisierungs-Bereich.
Wäre nett, wenn mir jemand helfen kann
haben nun bei uns im Bezug auf den Unterricht neues Material bekommen, habe einiges alleine hinbekommen, verzweifle aber nun an einem Arbeitsblatt mit dem Titel "Persistenz von Daten", also per Definiton der dauerhaften Speicherung von Daten bzw. Objekten auf einem nichtflüchtigen Speicher-Medium.
In der PDF wurden die Klassen "StreamReader" und "StreamWriter" sowie "XMLSerializer" vorgestellt.
Im Vorhinein habe ich bereits, den Aufgabe nach, ein Adressbuch erstellt mit Personen-Objekten, welche diverse Daten wie Namen, Nachnamen, Adresse (Eigene Klasse) und die Postleitzahl enthalten.
Aufgabe ist nun:
Ergänzen Sie ihr Adressbuch-Projekt so, dass nach dem Programmstart die Prozessdaten gelesen
und bei Programmende geschrieben werden.
Modularisieren Sie diese Funktionalität in geeigneten Methoden der Klasse Program, die Sie
dann bei Bedarf aufrufen (siehe Beispiel-Code).
C#:
namespace [B][I]Adressbuch[/I][/B]
{
class Program
{
static void Main(string[] args)
{
// Lesen der Prozessdaten (Programmstart)
List<Person> personen = (List<Person>)readData();
// Alles Mögliche machen…
// Schreiben der Prozessdaten (Programmende)
writeData(personen);
}
static void writeData(List<Person> personen)
{
XmlSerializer serializer = new XmlSerializer(typeof(List<Person>));
using (StreamWriter writer = new StreamWriter("Adressbuch.xml"))
{
serializer.Serialize(writer, personen);
}
}
static object readData()
{
object o;
XmlSerializer serializer = new XmlSerializer(typeof(List<Person>));
using (StreamReader reader = new StreamReader("Adressbuch.xml"))
{
o = serializer.Deserialize(reader);
}
return o;
}
}
}
Soweit ich das verstanden habe, muss ich also zunächst einmal meine Liste mit den Personen-Objekten Serialisieren lassen, also in einer XML-Datei speichern, diese dann einlesen, bei Bedarf verändern und schließlich ausgeben lassen.
Nun mein Problem: Habe genau wie in der PDF beschrieben versucht, den Listen-Container des Typs Person zu Serialisieren, das Programm wird sogar ausgeführt, eine XML-Datei wird erstellt, diese enthält aber keine Angaben über die Objekte sondern ist bis auf die Platzhalter leer:
C#:
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfPerson xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Person />
<Person />
<Person />
<Person />
<Person />
</ArrayOfPerson>
Aussehen soll das ganze aber beispielhaft so:
C#:
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfPerson xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Person>
<Vorname>Uwe</Vorname>
<Nachname>Homm</Nachname>
<Geburtstag>2020-12-24T00:00:00</Geburtstag>
<Adressen>
<Adresse>
<Strasse>Sudetenstrasse</Strasse>
<Hausnr>5a</Hausnr>
<Plz>64521</Plz>
<Ort>Groß-Gerau</Ort>
</Adresse>
</Adressen>
</Person>
<Person>
<Vorname>Friedhelm</Vorname>
<Nachname>Ernst</Nachname>
<Geburtstag>2020-12-31T00:00:00</Geburtstag>
<Adressen>
<Adresse>
<Strasse>Darmstädter Straße</Strasse>
<Hausnr>90</Hausnr>
<Plz>65421</Plz>
<Ort>Groß-Gerau</Ort>
</Adresse>
<Adresse>
<Strasse>Uhugasse</Strasse>
<Hausnr>7</Hausnr>
<Plz>60489</Plz>
<Ort>Frankfurt</Ort>
</Adresse>
</Adressen>
</Person>
</ArrayOfPerson>
Meine Main sieht folgendermaßen aus (Falls ich auch die anderen Klassen senden soll, sagt bitte bescheid:
[/CODE]
class Program
{
static void Main(string[] args)
{
Person Mustermann = new Person();
Person Dieter = new Person("Dieter", "Bohlen", new DateTime(2004, 05, 02), new Adresse("Bohlenweg", "1", "50667", "Köln"));
Person Thomas = new Person("Thomas", "Mustermann", new DateTime(2003, 02, 01), new Adresse("Mehringdamm", "4", "30021", "Berlin"));
Person Franz = new Person("Franz", "Gans", new DateTime(2005, 07, 03), new Adresse("Rosenhof", "5", "64560", "Riedstadt"));
Person Tommy = new Person("Tommy", "Test", new DateTime(1958, 03, 01), new Adresse("Kirchweg", "5", "77765", "Hochstadt"));
personen.Add(Mustermann);
personen.Add(Dieter);
personen.Add(Thomas);
personen.Add(Franz);
personen.Add(Tommy);
Adresse computerbase = new Adresse("Putinweg", "2", "74627", "Internet");
Dieter.addNeueAdresse(computerbase );
XmlSerializer serializer = new XmlSerializer(typeof(List<Person>));
using (StreamWriter writer = new StreamWriter("Adressbuch.xml");
{
serializer.Serialize(writer, personen);
}
foreach (Person person in personen)
{
Console.WriteLine(
person.getVorname() + "\n" +
person.getNachname() + "\n" +
person.getGeburtstag().ToShortDateString() + "\n");
List<Adresse> adressen = person.getAdresseListe();
foreach (Adresse adresse in adressen)
{
Console.WriteLine(adresse.getStrasse());
Console.WriteLine(adresse.getHausnr());
Console.WriteLine(adresse.getPlz());
Console.WriteLine(adresse.getOrt());
Console.WriteLine("");
}
Console.WriteLine("===============");
[/CODE]
Relevant ist hierbei aber eigentlich nur der Serialisierungs-Bereich.
Wäre nett, wenn mir jemand helfen kann
Zuletzt bearbeitet: