Можно сделать это путем обхода стека назад. В действительности, тем не менее, часто легче добавить идентификатор на стек вызовов в начале каждой функции и вытолкать его в конце, тогда просто обойти ту печать содержания. Это - что-то вроде ЛАВАША, но это работает хорошо и сэкономит Вам время в конце.
Немного короче: -)
var yourList = new List<int>() { 1, 2, 3 };
using (var writer = new StringWriter())
{
new XmlSerializer(yourList.GetType()).Serialize(writer, yourList);
var xmlEncodedList = writer.GetStringBuilder().ToString();
}
Хотя в этом предыдущем подходе есть недостаток, на который стоит обратить внимание. Он сгенерирует заголовок utf-16
, поскольку мы используем StringWriter , поэтому он не совсем эквивалентен вашему коду. Чтобы получить заголовок utf-8
, мы должны использовать MemoryStream и XmlWriter , который представляет собой дополнительную строку кода:
var yourList = new List<int>() { 1, 2, 3 };
using (var stream = new MemoryStream())
{
using (var writer = XmlWriter.Create(stream))
{
new XmlSerializer(yourList.GetType()).Serialize(writer, yourList);
var xmlEncodedList = Encoding.UTF8.GetString(stream.ToArray());
}
}
Запись метод расширения или класс / функция-оболочка для инкапсуляции фрагмента.
Вам не нужен MemoryStream
, просто используйте StringWriter
:
var yourList = new List<int>() { 1, 2, 3 };
using (StringWriter sw = new StringWriter())
{
var xs = new XmlSerializer(yourList.GetType());
xs.Serialize(sw, yourList);
string xmlEncodedList = sw.ToString();
}