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> - поэтому ошибка имеет смысл.
У меня есть методы расширения для автоматического/сериализации, но это не то, что я ищу (это клиентская сторона, но мне все же хотелось бы что-то более оптимальное).
Любые идеи?
Ответы
Ответ 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());
}