Laden...

Objekt lässt sich zu XML serialisieren, aber nicht deserialisieren

Erstellt von Freeman4gu vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.014 Views
Freeman4gu Themenstarter:in
71 Beiträge seit 2007
vor 13 Jahren
Objekt lässt sich zu XML serialisieren, aber nicht deserialisieren

Hallo zusammen,

hoffe Ihr könnt mir helfen. Ich habe mir in meiner Nachrichtenklasse 2 Methoden geschrieben um das komplette Objekt zu XML zu serialisieren und wieder zurück zu deserialisieren.

Ersteres, also das Serialisieren zu XML klappt ohne Probleme, nur umgekehrt wills nicht. Vielleicht habt Ihr ja eine Ahnung woran es liegen kann?!


/// <summary>
/// Die Nachricht aus dem XML String laden
/// </summary>
/// <param name="xml"></param>
/// <returns></returns>
internal Message LoadFromXMLString(String xml)
{
    XmlSerializer ser = new XmlSerializer(this.GetType());

    using (StringReader reader = new StringReader(xml))
        return (Message)ser.Deserialize(reader);
}

/// <summary>
/// Die Nachricht in ein Byte[] XML-Array schreiben
/// </summary>
/// <returns></returns>
internal Byte[] SaveToXML()
{
    XmlSerializer ser = new XmlSerializer(this.GetType());

    using (StringWriter writer = new StringWriter())
    {
        ser.Serialize(writer, this);

        System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
        return encoding.GetBytes(writer.ToString());
    }
}

Gruß, Freeman

Android & WP7 development | Bikube - Projektmanagement und Wiki
http://zero-level-studios.com
http://bikube.de

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo Freeman4gu,

... nur umgekehrt wills nicht

siehe [Hinweis] Wie poste ich richtig? Punkt 5.

herbivore

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo,

new XmlSerializer(this.GetType());

Besser wäre es außerdem den Typen nicht per GetType sondern per typeof anzugeben da somit die Serialisierungsassembly nicht jedesmal neu erstellt werden muss sonder die Laufzeit kann diese Assembly dann cachen.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

5.658 Beiträge seit 2006
vor 13 Jahren

Mir fällt auf, daß du beim Serialisieren ein Encoding angibst, aber nicht beim Deserialisieren.

Weeks of programming can save you hours of planning

Freeman4gu Themenstarter:in
71 Beiträge seit 2007
vor 13 Jahren

OK das Problem hat sich erledigt. Fehler von mir.

Was ist denn an umgekehrt falsch zu verstehen wenns von Objekt zu XML geht? Nächstes mal versuche ich es dennoch etwas klarer zu formulieren 😉

Ich habe die Nachricht als Return-Wert angegeben, dabei muss sie sich natürlich selbst füllen ^^

Gibt es eigentlich eine Möglichkeit, dass dies funktioniert?


this = (Message)ser.Deserialize(reader);

Ich fülle nun umständlich jede Klassenvariable manuell, ala


Message m = (Message)ser.Deserialize(reader);
this.Id = m.Id;

ist natürlich nur abgekürzt geschrieben ^^

Android & WP7 development | Bikube - Projektmanagement und Wiki
http://zero-level-studios.com
http://bikube.de