2008-11-24 6 views
22

Existe-t-il un moyen de dé/sérialiser un objet sans déclencher une chaîne XmlDocument/temp? Je cherche quelque chose comme ce qui suit:De/Sérialiser directement vers/depuis 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; } 
} 

Je reçois une erreur quand je fais ça bien (des espaces non blancs ne peuvent pas être ajoutées au contenu.) Si j'enveloppe la classe dans l'élément que je vois que le contenu écrit est < élément > ConsoleApplication17.MyClass </élément > - donc l'erreur est logique.

Je faire ont des méthodes d'extension à de/sérialisation automatiquement, mais ce n'est pas ce que je cherche (ce qui est côté client, mais je encore comme quelque chose de plus optimale).

Des idées?

Répondre

34

Quelque chose comme 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()); 
    }