此XmlWriter不支持base64编码数据

时间:2010-08-13 21:18:21

标签: c# .net xml xml-serialization

我有一个这样的课程:

public class Data
{
    public string Name { get; set; }
    public int Size { get; set; }
    public string Value { get; set; }

    [NonSerialized] public byte[] Bytes;
}

List<Data>点击下面的序列化方法时,它偶尔会死于

  

InvalidOperationException“这个   XmlWriter不支持base64   编码数据。“

正如您所看到的,我不是直接编码任何东西,只是使用默认的序列化机制。

private static XDocument Serialize<T>( T source )
{
    var target = new XDocument( );
    var s = new XmlSerializer( typeof( T ) );
    using( XmlWriter writer = target.CreateWriter( ) )
    {
        s.Serialize( writer, source );
    }
    return target;
}

数据将具有Name属性,这些属性是由下划线分隔的英语单词。除了添加了数学运算符或数字(它们是数学表达式)之外,Value属性将类似。

有谁知道造成它的原因以及如何纠正它?

1 个答案:

答案 0 :(得分:4)

使用[XmlIgnore]代替[NonSerialized]。根据{{​​3}}:

,后者适用于SOAP和二进制格式化程序
  

使用BinaryFormatter或时   SoapFormatter类来序列化   对象,使用NonSerializedAttribute   用于阻止字段的属性   被序列化。例如,你可以   使用此属性来阻止   敏感数据的序列化。

     

目标对象   NonSerializedAttribute属性是   公共和私人领域   可序列化的类。默认情况下,   除非,类不可序列化   它们标有   SerializableAttribute。在此期间   序列化过程全部公开   一个类的私有字段   默认序列化。字段标记   使用NonSerializedAttribute是   序列化期间排除。如果你   正在使用XmlSerializer类   序列化一个对象,使用   获取XmlIgnoreAttribute类   相同的功能。

请注意,我对原始代码甚至编译感到惊讶 - 当我尝试它时,它说[NonSerialized]只能应用于字段...