Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort zur 6. Auflage
1 Allgemeine Einführung in .NET
2 Grundlagen der Sprache C#
3 Das Klassendesign
4 Vererbung, Polymorphie und Interfaces
5 Delegates und Ereignisse
6 Strukturen und Enumerationen
7 Fehlerbehandlung und Debugging
8 Auflistungsklassen (Collections)
9 Generics – Generische Datentypen
10 Weitere C#-Sprachfeatures
11 LINQ
12 Arbeiten mit Dateien und Streams
13 Binäre Serialisierung
14 XML
15 Multithreading und die Task Parallel Library (TPL)
16 Einige wichtige .NET-Klassen
17 Projektmanagement und Visual Studio 2012
18 Einführung in die WPF und XAML
19 WPF-Layout-Container
20 Fenster in der WPF
21 WPF-Steuerelemente
22 Elementbindungen
23 Konzepte von WPF
24 Datenbindung
25 Weitere Möglichkeiten der Datenbindung
26 Dependency Properties
27 Ereignisse in der WPF
28 WPF-Commands
29 Benutzerdefinierte Controls
30 2D-Grafik
31 ADO.NET – Verbindungsorientierte Objekte
32 ADO.NET – Das Command-Objekt
33 ADO.NET – Der SqlDataAdapter
34 ADO.NET – Daten im lokalen Speicher
35 ADO.NET – Aktualisieren der Datenbank
36 Stark typisierte DataSets
37 Einführung in das ADO.NET Entity Framework
38 Datenabfragen des Entity Data Models (EDM)
39 Entitätsaktualisierung und Zustandsverwaltung
40 Konflikte behandeln
41 Plain Old CLR Objects (POCOs)
Stichwort

Download:
- Beispiele, ca. 62,4 MB

Buch bestellen
Ihre Meinung?

Spacer
Visual C# 2012 von Andreas Kühnel
Das umfassende Handbuch
Buch: Visual C# 2012

Visual C# 2012
Rheinwerk Computing
1402 S., 6., aktualisierte und erweiterte Auflage 2013, geb., mit DVD
49,90 Euro, ISBN 978-3-8362-1997-6
Pfeil 14 XML
Pfeil 14.1 Grundlagen
Pfeil 14.2 XML-Dokumente
Pfeil 14.2.1 Wohlgeformte und gültige XML-Dokumente
Pfeil 14.2.2 Die Regeln eines wohlgeformten XML-Codes
Pfeil 14.2.3 Kommentare
Pfeil 14.2.4 Verarbeitungsanweisungen
Pfeil 14.2.5 Reservierte Zeichen in XML
Pfeil 14.2.6 CDATA-Abschnitte
Pfeil 14.2.7 Namensräume (Namespaces)
Pfeil 14.3 Die Gültigkeit eines XML-Dokuments
Pfeil 14.3.1 XML Schema Definition (XSD)
Pfeil 14.3.2 Ein XML-Dokument mit einem XML-Schema verknüpfen
Pfeil 14.3.3 Die Struktur eines XML-Schemas
Pfeil 14.4 Die Klasse »XmlReader«
Pfeil 14.4.1 XML-Dokumente mit einem »XmlReader«-Objekt lesen
Pfeil 14.4.2 Validieren eines XML-Dokuments
Pfeil 14.5 Eigenschaften und Methoden der Klasse »XmlReader«
Pfeil 14.6 Die Klasse »XmlWriter«
Pfeil 14.6.1 Die Methoden der Klasse »XmlWriter«
Pfeil 14.7 Navigation durch XML (XPath)
Pfeil 14.7.1 Die Klasse »XPathNavigator«
Pfeil 14.7.2 XPath-Ausdrücke
Pfeil 14.7.3 Der Kontextknoten
Pfeil 14.7.4 Beispiele mit XPath-Ausdrücken
Pfeil 14.7.5 Knotenmengen mit der »Select«-Methode
Pfeil 14.7.6 Auswerten von XPath-Ausdrücken
Pfeil 14.8 Das Document Object Model (DOM)
Pfeil 14.8.1 Allgemeines
Pfeil 14.8.2 Arbeiten mit »XmlDocument«
Pfeil 14.8.3 »XmlDocument« und »XPathNavigator«
Pfeil 14.8.4 Die Klasse »XmlNode« (Operationen mit Knoten)
Pfeil 14.8.5 Manipulieren einer XML-Struktur
Pfeil 14.8.6 Ändern eines Knotens
Pfeil 14.8.7 Löschen in einem XML-Dokument
Pfeil 14.9 Serialisierung mit »XmlSerializer«
Pfeil 14.9.1 XML-Serialisierung mit Attributen steuern
Pfeil 14.10 LINQ to XML
Pfeil 14.10.1 Allgemeines
Pfeil 14.10.2 Die Klassenhierarchie von LINQ to XML
Pfeil 14.10.3 Die Klasse »XElement«
Pfeil 14.10.4 Die Klasse »XDocument«
Pfeil 14.10.5 Navigation im XML-Dokument
Pfeil 14.10.6 Änderungen am XML-Dokument vornehmen

Galileo Computing - Zum Seitenanfang

14.9 Serialisierung mit »XmlSerializer«Zur nächsten Überschrift

Bisher sind wir immer davon ausgegangen, dass die Daten bereits im XML-Format vorliegen. Das .NET Framework bietet zahlreiche Möglichkeiten, Daten in ein XML-Format zu überführen. Das können Sie sogar mit den Daten x-beliebiger Objekte umsetzen. Diese Technik wird als XML-Serialisierung bezeichnet.

In Kapitel 13 wurde bereits die binäre Serialisierung besprochen, die nun in diesem Abschnitt ihre Fortsetzung findet.

Für die XML-Serialisierung ist die Klasse XmlSerializer zuständig, die zum Namespace System.Xml.Serialization.XmlSerializer gehört. Um Objektdaten in das XML-Format überführen zu können, sind einige Einschränkungen zu beachten:

  • Die zu serialisierende Klasse muss public definiert sein.
  • Es werden nur public deklarierte Felder oder Eigenschaften serialisiert. Die Eigenschaften müssen den lesenden und schreibenden Zugriff zulassen.
  • Die zu serialisierende Klasse muss einen öffentlichen, parameterlosen Konstruktor haben.
  • Die Steuerung der XML-Serialisierung erfolgt mit Attributen, die im Namespace System.Xml.Serialization zu finden sind. Damit ist es beispielsweise möglich, bestimmte Felder vom Serialisierungsprozess auszuschließen.
  • Im Gegensatz zu BinaryFormatter (siehe Kapitel 13) ist das Serializable-Attribut nicht zwingend vorgeschrieben.

Im folgenden Beispiel wird das Prinzip der XML-Serialisierung gezeigt.

// Beispiel: ..\Kapitel 14\XMLSerialisierung

using System;
using System.IO;
using System.Xml.Serialization;

class Program {
static XmlSerializer serializer;
static FileStream stream;

static void Main(string[] args) {
serializer = new XmlSerializer(typeof(Person));
Person person = new Person("Jutta Speichel", 34);
SerializeObject(person);
Person oldPerson = DeserializeObject();
Console.WriteLine("Name: " + oldPerson.Name);
Console.WriteLine("Alter: " + oldPerson.Alter);
Console.ReadLine();
}

// Objekt serialisieren

public static void SerializeObject(object obj) {
stream = new FileStream(@"D:\PersonData.xml", FileMode.Create);
serializer.Serialize(stream, obj);
stream.Close();
}

// Objekt deserialisieren

public static Person DeserializeObject() {
stream = new FileStream(@"D:\PersonData.xml", FileMode.Open);
return (Person)serializer.Deserialize(stream);
}
}

// Zu serialisierende Klasse

public class Person {

// Felder

public int Alter { get; set; }
private string _Name;

// ----- Konstruktoren -----

public Person() { }
public Person(string name, int alter) {
Name = name;
Alter = alter;
}

// Eigenschaft

public string Name {
get { return _Name; }
set { _Name = value; }
}
}

Listing 14.59 Beispielprogramm zur XML-Serialisierung

Zur Einleitung des Serialisierungsprozesses wird der Konstruktor von XmlSerializer aufgerufen, der die Type-Angabe über das zu serialisierende Objekt entgegennimmt.

XmlSerializer serializer = new XmlSerializer(typeof(Person));

Wie bei der binären Serialisierung mit der Klasse BinaryFormatter werden die Objekte mit der Methode Serialize serialisiert. Sehen wir uns den Inhalt der XML-Datei an:

<?xml version="1.0"?>
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Alter>34</Alter>
<Name>Jutta Speichel</Name>
</Person>

Listing 14.60 Das Ergebnis der XML-Serialisierung aus Listing 14.59

Mit Deserialize werden die XML-Daten deserialisiert und in ein Objekt geschrieben. Da Deserialize den Typ Object ausliefert, müssen wir abschließend nur noch eine Typumwandlung in Person vornehmen.


Galileo Computing - Zum Seitenanfang

14.9.1 XML-Serialisierung mit Attributen steuernZur vorigen Überschrift

Die XML-Serialisierung lässt sich auch mit zusätzlichen Attributen steuern, um das Ausgabeformat der serialisierten Daten zu bestimmen. Diese Attribute gehören zum Namespace System.Xml.Serialization. Die folgende Tabelle gibt einen kleinen Überblick über die wichtigsten Attribute.

Tabelle 14.19 Attribute zur Steuerung der Ausgabe in einer XML-Datei

Attribut Beschreibung

XmlArray

Gibt an, dass ein bestimmter Klassen-Member als Array serialisiert werden soll.

XmlArrayItem

Legt den Bezeichner in der XML-Datei für den vom Array verwalteten Typ fest.

XmlAttribute

Die Eigenschaft wird als XML-Attribut und nicht als XML-Element serialisiert.

XmlElement

Dieses Attribut legt den Elementnamen in der XML-Datei fest. Standardmäßig wird der Bezeichner des Feldes verwendet.

XmlIgnore

Legt fest, dass die Eigenschaft nicht serialisiert werden soll.

XmlRoot

Legt den Bezeichner des Wurzelelements der XML-Datei fest. Standardmäßig wird der Bezeichner der zu serialisierenden Klasse verwendet.

Am folgenden Beispiel wollen wir uns die Wirkungsweise der Attribute verdeutlichen. In der Anwendung ist erneut eine Klasse Person definiert. Mehrere Objekte vom Typ Person können von einem Objekt der Klasse Personenliste verwaltet werden.

// Beispiel: ..\Kapitel 14\XMLAttributeSample

using System.Xml.Serialization;
using System.IO;

[...]

[XmlRoot("PersonenListe")]
public class PersonenListe
{
[XmlElement("Listenbezeichner")]
public string Listenname;

[XmlArray("PersonenArray")]
[XmlArrayItem("PersonObjekt")]
public Person[] Personen;

// Konstruktoren

public PersonenListe() { }

public PersonenListe(string name) {
this.Listenname = name;
}
}

public class Person {
[XmlElement("Name")]
public string Zuname;

[XmlElement("Wohnort")]
public string Ort;

[XmlElement("Alter")]
public int Lebensalter;

[XmlAttribute("PersID", DataType = "string")]
public string ID;

// Konstruktoren

public Person() { }

public Person(string zuname, string ort, int alter, string id) {
this.Zuname = zuname;
this.Ort = ort;
this.Lebensalter = alter;
this.ID = id;
}
}

Listing 14.61 XML-Serialisierung mit »Attribute« beeinflussen

Ehe wir uns die Auswirkung der Attributierung ansehen, folgt hier zuerst der Code, der Person-Objekte mit XmlSerializer serialisiert:

class Program {
static void Main(string[] args) {
PersonenListe catalog = new PersonenListe("Teilnehmerliste");
catalog.Listenname = "Teilnehmerliste";
Person[] persons = new Person[2];

// Personen erzeugen

persons[0] = new Person("Peter", "Berlin", 45, "117");
persons[1] = new Person();
persons[1].Zuname = "Franz-Josef";
persons[1].Ort = "Aschaffenburg";
catalog.Personen = persons;

// serialisieren

XmlSerializer serializer = new XmlSerializer(typeof(PersonenListe));
FileStream fs = new FileStream("Personenliste.xml", FileMode.Create);
serializer.Serialize(fs, catalog);
fs.Close();
catalog = null;

// deserialisieren

fs = new FileStream("Personenliste.xml", FileMode.Open);
catalog = (PersonenListe)serializer.Deserialize(fs);
serializer.Serialize(Console.Out, catalog);
Console.ReadLine();
}
}

Listing 14.62 Serialisierung der Typen aus Listing 14.61

Das Array persons beschreibt ein Array von Person-Objekten, das zwei Objekte dieses Typs enthält. Die Referenz auf persons wird der Eigenschaft Personen eines PersonenListe-Objekts zugewiesen. Danach erfolgt die Serialisierung mit XmlSerializer in eine XML-Datei.

Nach der Serialisierung wird die Datei deserialisiert und ein serialisierender Datenstrom erzeugt, der in der Konsole seinen Abnehmer findet. So können wir uns den Inhalt des XML-Stroms direkt im Konsolenfenster ansehen, ohne die XML-Datei öffnen zu müssen (siehe Abbildung 14.12).

Abbildung

Abbildung 14.12 Ausgabe der Listings 14.61 und 14.62

Beachten Sie, wie die Verwendung der Attribute Einfluss auf die Elementbezeichner in der XML-Ausgabe nimmt.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.

>> Zum Feedback-Formular
<< zurück
  Zum Katalog
Zum Katalog: Visual C# 2012

Visual C# 2012
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Professionell entwickeln mit Visual C# 2012






 Professionell
 entwickeln mit
 Visual C# 2012


Zum Katalog: Windows Presentation Foundation






 Windows Presentation
 Foundation


Zum Katalog: Schrödinger programmiert C++






 Schrödinger
 programmiert C++


Zum Katalog: C++ Handbuch






 C++ Handbuch


Zum Katalog: C/C++






 C/C++


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Rheinwerk Verlag GmbH 2013
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de