此XmlWriter不支持base64编码数据

µBi*_*Bio 5 .net c# 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;
}
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

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

有谁知道是什么导致它以及我如何纠正它?

Jon*_*eet 4

使用[XmlIgnore]而不是[NonSerialized]. 根据MSDN 的说法,后者用于 SOAP 和二进制格式化程序:

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

NonSerializedAttribute 属性的目标对象是可序列化类的公共和私有字段。默认情况下,类是不可序列化的,除非它们用 SerializedAttribute 标记。在序列化过程中,默认情况下会序列化类的所有公共和私有字段。序列化期间会排除标有 NonSerializedAttribute 的字段。如果使用 XmlSerializer 类序列化对象,请使用 XmlIgnoreAttribute 类来获得相同的功能。

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