Code-Beispiel

Beispiel zur Steuerung der XML-Serialisierung mit Meta-Attributen

Ein Beispiel zum Einsatz der Klasse System.Xml.Serialization.XmlSerializer aus der .NET-Klassenbibliothek.

Autor: Dr. Holger Schwichtenberg

Beschreibung

Die Steuerung der Serialisierung beim XML-Serialisierer erfolgt durch Meta-Attribute. Es gibt zahlreiche Meta-Attribute für den Zweck, das folgende Beispiel demonstriert zwei wichtige:
  • <XmlAttributeAttribute()>

Dieses Meta-Attribut bewirkt, dass das damit versehene Klassenattribut in ein XML-Attribut und nicht – wie es Standard ist – in ein XML-Element serialisiert wird.
  • <XmlIgnore()>

Dieses Meta-Attribut bewirkt, dass das damit versehene Klassenattribut nicht serialisiert wird.

Das Attribut <System.NonSerialized()>, das zur Ausklammerung von Attributen beim Binär- und SOAP-Serialisierer verwendet wird, wirkt nicht auf den XML-Serialisierer.

Beispiel
Das folgende Beispiel zeigt beide o.g. Meta-Attribute in der Anwendung.

Programmcodebeispiele Visual Basic .NET (VB.NET)

' ============================
' .NET-Code-Beispiel in Visual Basic .NET
' Klasse für benutzerdefinierte XML-Serialisierung
' (C) Holger@Schwichtenberg.de
' ============================
<Serializable()> Public Class Person3
Public Name As String
Public Vorname As String
<XmlAttributeAttribute()> _
Public Geschlecht As Char
Public Geb As Date
<XmlIgnore()> Public Kinderanzahl As Byte
End Class

Sub serialkontrolle2()
Dim p As New Person3()
p.Vorname = "Holger"
p.Name = "Schwichtenberg"
p.Geb = #8/1/1972#
p.Geschlecht = "m"
p.Kinderanzahl = 0

xml_serialize(p, "h:\data\person3.xml")
End Sub

Programmcodebeispiele CSharp (C#)

using System;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using System.IO;
using System.Xml.Serialization;

using FCL_Buch;

namespace FCLBuch._System_RuntimeSerialization {

[Serializable()]
public class Person3 {

public string Name;
public string Vorname;
public string Taetigkeiten;
public byte gehalt;
[XmlAttributeAttribute()] public char Geschlecht;
[System.NonSerialized()] public DateTime Geb; // Attribut wirkt nicht auf XML-Serialisierer
[XmlIgnore()] public byte Kinderanzahl;

}
}

using System;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using System.IO;
using System.Xml.Serialization;

using FCL_Buch;

namespace FCLBuch._System_RuntimeSerialization {

public class SamplesKontrolliertesSerialisieren {
public void SerialKontrolle2() {

Person3 p = new Person3();

FclOutput.PrintOut("BenutzerdefXML_Serialisierentest()");

p.Vorname = "Holger";
p.Name = "Schwichtenberg";
p.Geb = DateTime.Parse("8/1/1972");
p.Geschlecht = 'm';
p.Kinderanzahl = 0;
p.gehalt = 6;
SerializationHelper.XmlSerialize(p, @"..\daten\person3.xml");
SerializationHelper.BinSerialize(p, @"..\daten\person3.bin");
SerializationHelper.SoapSerialize(p, @"..\daten\person3.soap.xml");

try {
p = (Person3)SerializationHelper.XmlDeserialize(p.GetType(), @"..\daten\serial\person3.xml");
FclOutput.PrintOut(p.Vorname + " " + p.Name + " hat am " + p.Geb + " Geburtstag!");
} catch ( Exception ex ) {
FclOutput.PrintOut("XML Deserialisierung nicht möglich: " + ex.Message);
}

try {
p = (Person3)SerializationHelper.BinDeserialize(@"..\daten\serial\person3.bin");
FclOutput.PrintOut(p.Vorname + " " + p.Name + " hat am " + p.Geb + " Geburtstag!");
} catch ( Exception ex ) {
FclOutput.PrintOut("Binäre Deserialisierung nicht möglich: " + ex.Message);
}

try {
p = (Person3)SerializationHelper.SoapDeserialize(@"..\daten\serial\person3.soap.xml");
FclOutput.PrintOut(p.Vorname + " " + p.Name + " hat am " + p.Geb + " Geburtstag!");
} catch ( Exception ex ) {
FclOutput.PrintOut("SOAP Deserialisierung nicht möglich: " + ex.Message);
}
}
}
}

 

Querverweise

 Liste aller Codebeispiele  Definition '.NET Framework Class Library'  Verfügbarkeit der Klasse 'System.Xml.Serialization.XmlSerializer'  Übersicht über den FCL-Namensraum 'System.Xml.Serialization'  .NET & Visual Studio Community Portal

Buchtipp

Buchcover PowerShell 7 und Windows PowerShell 5 – das Praxishandbuch (5. Auflage Oktober 2022 (9. Auflage Gesamtreihe)) PowerShell 7 und Windows PowerShell 5 – das Praxishandbuch
Autoren: Dr. Holger Schwichtenberg
erschienen 10/2022, 1426 Seiten
ISBN: 3446472967

Beratung & Support

Schulungen zu diesem Thema

 Visual Basic .NET - Aufbauwissen
 Grundlagen der objektorientierten Programmierung anhand von C# oder Visual Basic .NET
 Unit Testing / Testgetriebene Entwicklung / Test Driven Development (TDD) von .NET-Anwendungen (C# oder Visual Basic .NET)
 Visual Basic 6.0 (VB6.0)
 Objektorientierte Entwurfsmuster (Design-Pattern/Architektur-Pattern) mit .NET (C#, Visual Basic .NET)
 Visual Basic .NET - Basiswissen
 Windows Modern Apps/Windows Universal Apps entwickeln mit der Windows Runtime (WinRT), XAML und .NET/C#/Visual Basic
 Visual Basic Script (VBScript/VBS) - Sprachsyntax und Praxiseinsatz
 Word-Programmierung mit Visual Basic for Applications (VBA)
 Visual Studio Tools for Microsoft Office (VSTO) - Microsoft Office-Programmierung mit .NET und C# oder Visual Basic in Visual Studio
 Multi-Threading in .NET mit C#/Visual Basic .NET und/oder C++ und C++/CLI
 C# für Umsteiger von Visual Basic .NET
 Objektorientierte Programmierung (OOP) mit C#, Java, C++, Visual Basic.NET o.ä.
 Excel-Programmierung mit Visual Basic for Applications (VBA)
 Visual Basic .NET für Umsteiger von VBA/VB 4/5/6
 Visual Basic 2005 (Visual Basic 8.0)
 .NET und C# für Umsteiger von klassischem Visual Basic/COM
 Outlook-Programmierung mit Visual Basic for Applications (VBA)
 Das Component Object Model - für Script- und Visual Basic-Entwickler
 C#-Basiswissen (Grundlagen der Programmiersprache C#)
 .NET Akademie: Unit Testing und Test Driven Development (TDD) mit .NET/C# (3-Tages-Agenda des öffentlichen Seminars)
 Neuerungen in C# 7.0/7.1/7.2/7.3
 Task Parallel Library (TPL) - Parallelprogrammierung/Multi-Threading in .NET/C#
 Event Driven Design (mit .NET/C# oder Java)
 Neuerung in der CLR 2.0 und C# 2005
 Neuerungen in C# 6.0
 .NET Akademie: Blazor-Hands-On: Echte Single-Page-Web-Apps mit .NET und C# entwickeln (3-Tages-Agenda des öffentlichen Seminars)
 Neuerungen in C# 3.0 (Visual C# 2008)
 Refactoring von Programmcode in C, C++, C#, Java, Kotlin, JavaScript, TypeScript, Python, Go oder Rust
 Windows 8/Windows 8.1 für Entwickler: Programmierung mit der Windows Runtime (WinRT) - Erstellen von Windows Apps mit C#/XAML und/oder JavaScript/HTML
 Anfrage für eine individuelle Schulung zum Thema Visual Basic C#  Gesamter Schulungsthemenkatalog

Bücher zu diesem Thema

  Blazor 8.0: Moderne Webanwendungen und hybride Cross-Platform-Apps mit .NET 8.0, C# 12.0 und Visual Studio 2022
  C# 12.0 Crashkurs
  C# 11.0 Crashkurs
  C# 10.0 Crashkurs
  C# 9.0 Crashkurs: Die Syntax der Programmiersprache C# für die Softwareentwicklung in .NET 5.0, .NET Core und Xamarin
  ASP.NET Core Blazor 3.1/3.2: Blazor Server und Blazor Webassembly - Moderne Single-Page-Web-Applications mit .NET, C# und Visual Studio
  ASP.NET Core Blazor 3.0/3.1: Blazor Server und Blazor Webassembly - Moderne Single-Page-Web-Applications mit .NET, C# und Visual Studio
  C# 8.0 Crashkurs: Die Syntax der Programmiersprache C# für die Softwareentwicklung in .NET Framework, .NET Core und Xamarin
  C# 7.3 Crashkurs: Die Syntax der Programmiersprache C# für die Softwareentwicklung in .NET Framework, .NET Core und Xamarin
  Modern Data Access with Entity Framework Core: Database Programming Using .NET, .NET Core, UWP, and Xamarin with C#
  C# 7.2 Crashkurs: Die Syntax der Programmiersprache C# für die Softwareentwicklung in .NET Framework, .NET Core und Xamarin
  Effizienter Datenzugriff mit Entity Framework Core: Datenbankprogrammierung mit C# für .NET Framework, .NET Core und Xamarin
  Windows Store Apps entwickeln mit C# und XAML - Crashkurs
  Microsoft ASP.NET 4.0 mit C# 2010 - Entwicklerbuch
  Microsoft Viusal C# 2010
  Visual Basic 2010: Grundlagen, ADO.NET, Windows Presentation Foundation
  ASP.NET 4.0 mit Visual C# 2010
  Visual Basic 2010
  Microsoft ASP.NET 3.5 mit Visual Basic 2008 - Entwicklerbuch
 Alle unsere aktuellen Fachbücher  E-Book-Abo für ab 99 Euro im Jahr