Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

De/Serialize directly To/From XML Linq

Is there any way to de/serialize an object without round-tripping a XmlDocument/temp string? I am looking for something like the following:

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; }
}

I get an error when I do that though (Non white space characters cannot be added to content.) If I wrap the class in the element I see that the content written is <element>ConsoleApplication17.MyClass</element> - so the error makes sense.

I do have extension methods to de/serialize automatically, but that's not what I am looking for (this is client-side, but I would still like something more optimal).

Any ideas?

like image 461
Jonathan C Dickinson Avatar asked Nov 24 '08 12:11

Jonathan C Dickinson


1 Answers

Something like 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());
    }
like image 119
Amy B Avatar answered Oct 31 '22 20:10

Amy B