Подтвердить что ты не робот

De/Serialize непосредственно в/из XML Linq

Есть ли способ де-сериализации объекта без округления строки 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; }
}

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

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

Любые идеи?

4b9b3361

Ответ 1

Что-то вроде 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());
    }