Code-Beispiel
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.
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