Самый элегантный способ сериализации объекта с членами byte [] в XDocument? - PullRequest
4 голосов
/ 21 сентября 2010

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

1 Ответ

2 голосов
/ 21 сентября 2010

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

...