Де / Сериализация напрямую в / из XML Linq - PullRequest
22 голосов
/ 24 ноября 2008

Есть ли способ де / сериализации объекта без циклического отключения строки XmlDocument / temp? Я ищу что-то вроде следующего:

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

Я получаю сообщение об ошибке, когда делаю это (символы без пробелов не могут быть добавлены к содержимому.) Если я обертываю класс в элементе, я вижу, что записанное содержимое имеет вид ConsoleApplication17.MyClass ошибка имеет смысл.

У меня есть есть методы расширения для де-сериализации автоматически, но это не то, что я ищу (это на стороне клиента, но я все еще хотел бы что-то более оптимальное).

Есть идеи?

1 Ответ

34 голосов
/ 26 ноября 2008

Что-то вроде это ?

    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());
    }
...