2008-11-24 13 views
22

Gibt es eine Möglichkeit, ein Objekt zu de-/serialisieren, ohne eine XmlDocument/temp-Zeichenfolge zu runden? Ich bin auf der Suche nach etwas wie folgt aus:Direktes De-/Serialisieren zu/Von XML Linq

class Program 
{ 
    static void Main(string[] args) 
    { 
     XDocument doc = new XDocument(); 
     MyClass c = new MyClass(); 
     c.SomeValue = "bar"; 

     doc.Add(c); 

     Console.Write(doc.ToString()); 
     Console.ReadLine(); 
    } 
} 

[XmlRoot(ElementName="test")] 
public class MyClass 
{ 
    [XmlElement(ElementName = "someValue")] 
    public string SomeValue { get; set; } 
} 

Ich erhalte eine Fehlermeldung, wenn ich das tun, obwohl (Non Leerzeichen kann nicht zum Inhalt hinzugefügt werden.) Wenn ich die Klasse in dem Element wickeln sehe ich, dass der Inhalt geschrieben wird <Element> ConsoleApplication17.MyClass </Element > - so macht der Fehler Sinn.

Ich habe do haben Erweiterung Methoden zu de/serialisieren automatisch, aber das ist nicht das, was ich suche (das ist Client-Seite, aber ich möchte immer noch etwas optimaler).

Irgendwelche Ideen?

Antwort

34

So etwas wie this?

public XDocument Serialize<T>(T source) 
    { 
     XDocument target = new XDocument(); 
     XmlSerializer s = new XmlSerializer(typeof(T)); 
     System.Xml.XmlWriter writer = target.CreateWriter(); 
     s.Serialize(writer, source); 
     writer.Close(); 
     return target; 
    } 

    public void Test1() 
    { 
     MyClass c = new MyClass() { SomeValue = "bar" }; 
     XDocument doc = Serialize<MyClass>(c); 
     Console.WriteLine(doc.ToString()); 
    }