2008-11-24 22 views
22

¿Hay alguna forma de de/serializar un objeto sin un disparo circular de una cadena XmlDocument/temp? Busco algo como lo siguiente:De/Serialize directamente Hacia/desde 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; } 
} 

me sale un error cuando hago eso, aunque (los caracteres de espacio no blancos no se pueden añadir a contenido.) Si envuelvo la clase en el elemento veo que el contenido escrito es <elemento> ConsoleApplication17.MyClass </element > - por lo que el error tiene sentido.

I do tengo métodos de extensión para de/serializar automáticamente, pero eso no es lo que estoy buscando (esto es del lado del cliente, pero aún me gustaría algo más óptimo).

¿Alguna idea?

Respuesta

34

¿Algo como 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()); 
    }