µ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属性将类似,除了添加数学运算符或数字(它们是数学表达式).
有谁知道是什么导致它以及我如何纠正它?
使用[XmlIgnore]而不是[NonSerialized]. 根据MSDN 的说法,后者用于 SOAP 和二进制格式化程序:
使用 BinaryFormatter 或 SoapFormatter 类序列化对象时,请使用 NonSerializedAttribute 属性来防止字段被序列化。例如,您可以使用此属性来防止敏感数据的序列化。
NonSerializedAttribute 属性的目标对象是可序列化类的公共和私有字段。默认情况下,类是不可序列化的,除非它们用 SerializedAttribute 标记。在序列化过程中,默认情况下会序列化类的所有公共和私有字段。序列化期间会排除标有 NonSerializedAttribute 的字段。如果使用 XmlSerializer 类序列化对象,请使用 XmlIgnoreAttribute 类来获得相同的功能。
请注意,我很惊讶你的原始代码甚至可以编译 - 当我尝试它时,它说[NonSerialized]只能应用于字段......