2017-12-21 3 views
1

Ich fand einige Diskussion in demselben Thema, kann aber immer noch nicht die ultimative Lösung für eine sehr einfache Aufgabe der Serialisierung/Deserialze eines Objekts im XML-Format finden.Objekt Xml Serialisierung/Deserialisierung

Das Problem, das ich in laufen ist:

Es in XML-Dokument (2,2)

enter image description here

Und der Code ein Fehler Problem zu reproduzieren:

public partial class Form1 : Form 
    { 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Serialize_Click(object sender, EventArgs e) 
    { 
     testclass t = new testclass(); 
     t.dummyInt = 10; 
     t.dummyString = "sssdf"; 
     textBox1.Text = t.SerializeObject(); 
    } 

    private void Deserialize_Click(object sender, EventArgs e) 
    { 
     try 
     { 
     object o = MySerializer.DeserializeObject<object>(textBox1.Text); 
     } 
     catch (Exception Ex) 
     { 
     MessageBox.Show(Ex.Message + Ex.InnerException, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
    } 
    } 

public class testclass 
{ 
    public int dummyInt; 
    public string dummyString; 
    public testclass() { } 
} 

public static class MySerializer 
{ 
    public static string SerializeObject<T>(this T toSerialize) 
    { 
    XmlSerializer xmlSerializer = new XmlSerializer(toSerialize.GetType()); 
    using (StringWriter textWriter = new StringWriter()) 
    { 
     xmlSerializer.Serialize(textWriter, toSerialize); 
     return textWriter.ToString(); 
    } 
    } 

    public static T DeserializeObject<T>(string data) 
    { 
    XmlSerializer serializer = new XmlSerializer(typeof(T)); 

    using (StringReader sReader = new StringReader(data)) 
    { 
     return (T)serializer.Deserialize(sReader); 
    } 
    } 
} 

Was ist hier falsch?

+3

können Sie bitte pr ovid xml, ich versuche es gerne an meinem ende –

+0

sicher, hier ist es: sssdf

+4

Mögliche Duplikat von [Wie Deserialize XML-Dokument] (https://stackoverflow.com/questions/364253/how-to-deserialize-xml-document) – stukselbax

Antwort

2

Sie rufen Deserialize mit dem falschen Typ auf.

Dies erstellt Ihnen einen Serializer, um ein Objekt aus XML zurückzugeben.

var o = MySerializer.DeserializeObject<object>(xml); 

Um die obige Zeile haben nicht seine XML-Eingabe aussehen bellen sollte:

<?xml version="1.0" encoding="utf-16"?> 
<anyType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" /> 

Wenn Sie so tun, um eine testclass erzählen die Serializer zurückkehren wollen:

var tc = MySerializer.DeserializeObject<testclass>(xml); 

That geben Sie eine testclass Instanz mit Ihrem XML-Eingang (wenn ich die Fehler darin beheben)

+0

Danke, Sie haben vollkommen Recht, aber ich habe Probleme mit der Lösung, da ich normalerweise nicht im Voraus weiß, welchen Objekttyp ich deserialisieren werde. Ich müsste auch den Namen des Objekttyps speichern und Reflektion verwenden, um den Typ vor der Deserialisierung zurückzuholen. Das ist nervig ... –

+0

Ja, du musst den Typ kennen, aber du könntest in den XML-Code des ersten Knotennamens schauen, um den Typ * zu erraten. Immer noch eine Vermutung ... – rene

+0

das wird nur der Typname sein, ich brauche noch eine Reflektion um Type zu bekommen. Aber keine Probleme, funktioniert schon so :-) –