我有一个这样的课程:
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
属性将类似。
有谁知道造成它的原因以及如何纠正它?
答案 0 :(得分:4)
使用[XmlIgnore]
代替[NonSerialized]
。根据{{3}}:
使用BinaryFormatter或时 SoapFormatter类来序列化 对象,使用NonSerializedAttribute 用于阻止字段的属性 被序列化。例如,你可以 使用此属性来阻止 敏感数据的序列化。
目标对象 NonSerializedAttribute属性是 公共和私人领域 可序列化的类。默认情况下, 除非,类不可序列化 它们标有 SerializableAttribute。在此期间 序列化过程全部公开 一个类的私有字段 默认序列化。字段标记 使用NonSerializedAttribute是 序列化期间排除。如果你 正在使用XmlSerializer类 序列化一个对象,使用 获取XmlIgnoreAttribute类 相同的功能。
请注意,我对原始代码甚至编译感到惊讶 - 当我尝试它时,它说[NonSerialized]
只能应用于字段...