Более легкий способ сериализировать класс C# как текст XML

Можно сделать это путем обхода стека назад. В действительности, тем не менее, часто легче добавить идентификатор на стек вызовов в начале каждой функции и вытолкать его в конце, тогда просто обойти ту печать содержания. Это - что-то вроде ЛАВАША, но это работает хорошо и сэкономит Вам время в конце.

8
задан Andomar 15 November 2009 в 19:26
поделиться

3 ответа

Немного короче: -)

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());
    }
}
19
ответ дан 5 December 2019 в 08:52
поделиться

Запись метод расширения или класс / функция-оболочка для инкапсуляции фрагмента.

0
ответ дан 5 December 2019 в 08:52
поделиться

Вам не нужен 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();
}
0
ответ дан 5 December 2019 в 08:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: