C# 将具有byte[]成员的对象序列化到XDocument的最优雅的方法?

C# 将具有byte[]成员的对象序列化到XDocument的最优雅的方法?,c#,xml-serialization,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.Cr

我有一个序列化实用程序,可以将对象序列化到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;
    }
内部例外是:

This XmlWriter does not support base64 encoded data.
结果是
XDocument.CreateWriter()
实例方法为您提供了类型为
System.Xml.XmlWellFormedWriter
的编写器,并且该编写器无法写入base64编码的数据(我的对象包含一个字节[])

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


我可以直接序列化为一个字符串,但我尽量保持聪明,避免使用任何黑客。当某些字段需要base64时,任何序列化到XDocument的方法。

根据,不允许使用字节。代理base64编码的字符串属性可能是您的最佳选择(如果它是设计的,这是一个黑客吗?)

啊,好吧-我只是假设可以支持任何有效的XML。我只希望XmlSerializer能够更聪明地为我处理它。我将返回到序列化到StringWriter,它可以很好地工作,但是xmlserializer不应该负责转换吗?毕竟xml毕竟只是文本。序列化程序正在转换它,但是
XDocument
中的
XmlWriter
不喜欢它的转换——这就是您遇到的错误。可能还有其他XMLWriter没有同样的问题——例如,使用
System.Xml.Linq.XDocument
,而不是使用
System.Xml.XmlDocument
,您可能会更幸运。或者,您必须绕过这些限制,将您的类型限制为仅具有工作正常的属性。。。在本例中,这意味着不直接序列化字节数组。
This XmlWriter does not support base64 encoded data.