最优雅的方法是将带有byte []成员的对象序列化为XDocument?

时间:2010-09-21 03:38:01

标签: c# xml-serialization

我有一个序列化实用程序,它将对象序列化为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编码数据(我的对象包含byte [])。

MSDN甚至没有提到这个类 - 但我似乎无法从XDocument创建任何其他类型的编写器。

我可以序列化为一个字符串,但我试图变得聪明并避免使用任何黑客。当某些字段需要base64时,可以任何方式序列化到XDocument。

1 个答案:

答案 0 :(得分:2)

根据docs,不允许使用字节。代理base64编码的字符串属性可能是你最好的选择(如果它的设计是黑客攻击吗?)。