2014-10-07 6 views
0

Я пытаюсь быстро и правильно сериализовать объект XDocument. Я попробовал несколько вещей, но это последний (нашел его here) кажется простым и понятным:Сериализация XDocument

StringBuilder b = new StringBuilder(); 
XmlWriterSettings sett = new XmlWriterSettings(); 
sett.Encoding = Encoding.UTF8; 
XmlWriter xw = XmlWriter.Create(b, sett); 
doc.Save(xw); 
String r = b.ToString(); 

Однако, в конце концов, r просто пустая строка. Я что-то упускаю? Почему так сложно правильно сериализовать объект XDocument?

Неудобно то, что если я позвоню doc.ToString() Я получаю красивую сериализованную XML-строку без объявления. Если я вызываю doc.ToString(true), я получаю пустую строку (doc.Declaration).

+0

'xw.Close()' может быть? Хотя использование инструкции 'using' было бы лучше. Это то, что на самом деле отсутствует в вашем коде. –

+0

@ AndreiV да, это дает мне результаты, но полностью игнорирует настройку UTF8 и 'XDeclaration', давая мне (неправильный) UTF-16. –

+0

Я не уверен, что там происходит с кодировкой. Попробуйте обернуть его в оператор 'using'. –

ответ

0

Я понял. До сих пор не уверен, что это «правильный» способ сделать это, но здесь идет:

MemoryStream s = new MemoryStream(); 
using (TextWriter b = new StreamWriter(s, Encoding.UTF8)) 
    doc.Save(b); 

String r = Encoding.UTF8.GetString(s.ToArray()); 

Это приводит к правильно кодированного и правильно объявленной строки XML.

Смежные вопросы