Sie sind hier: Startseite
 Liste aller Codebeispiele

XML-Serialisieren in String

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;
}
}
}

Querverweise

 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