У меня есть утилита сериализации, которая сериализует объект в XDocument. Она работает довольно хорошо:Самый элегантный способ сериализации объекта с байтом [] членов в XDocument?
public static class SerializationUtil
{
public static T Deserialize<T>(XDocument doc)
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
using (var reader = doc.Root.CreateReader())
{
return (T)xmlSerializer.Deserialize(reader);
}
}
public static XDocument Serialize<T>(T value)
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
XDocument doc = new XDocument(z);
using (var writer = doc.CreateWriter())
{
xmlSerializer.Serialize(writer, value);
}
return doc;
}
использовал его довольно счастливо, и вдруг я получаю:
There was an error generating the XML document.
Внутреннее исключение:
This XmlWriter does not support base64 encoded data.
Оказывается, что метод XDocument.CreateWriter()
экземпляр дает вам писатель типа System.Xml.XmlWellFormedWriter
, и что этот писатель не может писать закодированные base64 данные (мой объект содержит байт []).
MSDN даже не упоминает этот класс, но я не могу создать какой-либо другой тип записи от XDocument
.
Я мог бы просто сериализовать строку, но я старался быть умным и избегать использования каких-либо хаков. Любой способ сериализации в XDocument, когда base64 необходим для определенных полей.
ah ok - я предположил, что любой допустимый XML может поддерживаться. Я просто хочу, чтобы XmlSerializer был достаточно умным, чтобы обрабатывать его для меня. я просто вернусь к сериализации в StringWriter, который отлично работает –
, но не должен ли xmlserializer отвечать за преобразование? ведь xml все равно текст. –
Сериализатор _is_ конвертирует его, но 'XmlWriter' из' XDocument' не любит его преобразования - это ошибка, которую вы получаете. Могут быть другие XmlWriters, которые не имеют такой же проблемы - например, вместо использования 'System.Xml.Linq.XDocument', вам может быть повезло с использованием' System.Xml.XmlDocument'. –