Code-Beispiel
Ein Beispiel zum Einsatz der Klasse System.Xml.Serialization.XmlSerializer aus der .NET-Klassenbibliothek.
Autor: Dr. Holger Schwichtenberg
Beschreibung
Leider kann die Serialize()-Methode nur mit Stream- und Writer-Objekten, nicht aber nicht mit String-Objekten arbeiten. Zur In-Memory-Serialisierung in einen String muss die MemoryStream-Klasse verwendet werden. Da es hier aber keine direkte Methode gibt, um den Stream-Inhalt als String zu erhalten, gibt es zwei Wege:
1. Lesen des MemoryStreams über ein StreamReader-Objekt oder
2. Umwandeln des MemoryStreams in eine Byte-Folge, zeichenweise Umwandlung in ein Char-Objekt und Zusammensetzen zu einem String
Ein so gewonnener XML-String kann z.B. in eine Datenbank gespeichert werden.
Programmcodebeispiele Visual Basic .NET (VB.NET)
' ### XML-Serialisieren in String
Function xml_serialize(ByVal obj As Object) As String
Dim serializer As New XmlSerializer(obj.GetType)
Dim s As String
' --- Serialisieren in MemoryStream
Dim ms As New MemoryStream()
serializer.Serialize(ms, obj)
out("Objekt wurde serialisiert!")
' --- Stream in String umwandeln
Dim r As StreamReader = New StreamReader(ms)
r.BaseStream.Seek(0, SeekOrigin.Begin)
s = r.ReadToEnd
' Alternative:
'Dim b As Byte
'Dim ba As Byte()
'ba = ms.ToArray
'For Each b In ba
' s = s & Convert.ToChar(b)
'Next
Return s
End Function
Programmcodebeispiele CSharp (C#)
using System;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization.Formatters.Soap;
using System.Runtime.Serialization;
using System.IO;
using System.Xml.Serialization;
using System.Xml;
using System.Data;
namespace FCLBuch._System_RuntimeSerialization {
// Hilfsfunktionen für Serialisierung
public class SerializationHelper {
public static string Xml_Serialize(object obj) {
// XML-Serialisieren in String
XmlSerializer serializer = new XmlSerializer(obj.GetType());
// Serialisieren in MemoryStream
MemoryStream ms = new MemoryStream();
serializer.Serialize(ms, obj);
FclOutput.PrintOut("Objekt wurde serialisiert!");
// Stream in String umwandeln
StreamReader r = new StreamReader(ms);
r.BaseStream.Seek(0, SeekOrigin.Begin);
return r.ReadToEnd();
}
public static string MSToString(MemoryStream ms) {
// Zeichenweise Umwandlung eines Memory-Streams in einen String
string s = String.Empty;
byte[] ba = ms.ToArray();
foreach (byte b in ba) {
s += (char)b;
}
return s;
}
}
}
Hinweise
Ausgaben werden in den Beispielen durch Hilfsroutinen wie out() und
PrintOut() erzeugt. Diese sind hier nicht angegeben, da deren Implementierung
von der jeweiligen Umgebung abhängt. Für Konsolenanwendungen können hier z.B.
Console.WriteLine() einsetzen.
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