2010-09-21 2 views
4

У меня есть утилита сериализации, которая сериализует объект в 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 необходим для определенных полей.

ответ

2

Согласно docs, байт не учитывается. Суррогатное свойство string, закодированное в base64, вероятно, будет вашим лучшим выбором (это взлом, если он по дизайну?).

+0

ah ok - я предположил, что любой допустимый XML может поддерживаться. Я просто хочу, чтобы XmlSerializer был достаточно умным, чтобы обрабатывать его для меня. я просто вернусь к сериализации в StringWriter, который отлично работает –

+0

, но не должен ли xmlserializer отвечать за преобразование? ведь xml все равно текст. –

+0

Сериализатор _is_ конвертирует его, но 'XmlWriter' из' XDocument' не любит его преобразования - это ошибка, которую вы получаете. Могут быть другие XmlWriters, которые не имеют такой же проблемы - например, вместо использования 'System.Xml.Linq.XDocument', вам может быть повезло с использованием' System.Xml.XmlDocument'. –

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