Сериализируйте объект представить в виде строки

У меня есть следующий метод для сохранения Объекта в файл:

// Save an object out to the disk
public static void SerializeObject<T>(this T toSerialize, String filename)
{
    XmlSerializer xmlSerializer = new XmlSerializer(toSerialize.GetType());
    TextWriter textWriter = new StreamWriter(filename);

    xmlSerializer.Serialize(textWriter, toSerialize);
    textWriter.Close();
}

Я признаюсь, что не записал это (я только преобразовал его в дополнительный метод, который взял параметр типа).

Теперь мне нужен он, чтобы отдать xml мне как строка (а не сохранить его в файл). Я изучаю его, но я еще не понял это.

Я думал, что это могло бы быть действительно легко для кого-то знакомого с этими объектами. Если не я пойму это в конечном счете.

293
задан dtb 12 March 2010 в 07:32
поделиться

1 ответ

Используйте StringWriter вместо StreamWriter :

public static string SerializeObject<T>(this T toSerialize)
{
    XmlSerializer xmlSerializer = new XmlSerializer(toSerialize.GetType());

    using(StringWriter textWriter = new StringWriter())
    {
        xmlSerializer.Serialize(textWriter, toSerialize);
        return textWriter.ToString();
    }
}

Обратите внимание, что важно использовать toSerialize.GetType () вместо typeof (T) в конструкторе XmlSerializer: если вы используете первый, код охватывает все возможные подклассы T (которые действительны для метод), тогда как использование последнего приведет к ошибке при передаче типа, производного от T . Вот ссылка на пример кода, который мотивирует это утверждение, где XmlSerializer вызывает исключение , когда typeof (T) ] используется, потому что вы передаете экземпляр производного типа методу, вызывающему SerializeObject, который определен в базовом классе производного типа: http://ideone.com/1Z5J1 .

Кроме того, Ideone использует Mono для выполнения кода; фактическое исключение , которое вы получите при использовании Microsoft.NET имеет другое сообщение , отличное от показанного на Ideone, но оно все равно не работает.

499
ответ дан 23 November 2019 в 01:38
поделиться
Другие вопросы по тегам:

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