Xml仅在序列化中忽略
本文关键字:序列化 Xml | 更新日期: 2023-09-27 18:24:12
private string _password;
public string Password
{
get
{
return _password;
}
set
{
if (_password != value)
{
_password = PasswordEncryptor.Encode(value);
OnPropChanged("Password");
}
}
}
PasswordEncryptor
是一个类,我在其中调用 Encode
方法进行编码。Password
编码后,通过XmlSerializer
将其序列化到磁盘中的文件。但是,每次程序启动时,文件都会反序列化,并在 set
中PasswordEncryptor.Encode()
再次对Password
进行编码。有没有办法只能在反序列化中[XmlIgnore]
它?
XmlAttributeOverrides
在这种情况下可以提供帮助。
来自 MSDN
允许您在以下情况下覆盖属性、字段和类属性 使用 XmlSerializer 序列化或反序列化对象
使用它,我们可以在反序列化期间忽略特定属性。
会是这样的...
XmlElementAttribute attr = new XmlElementAttribute();
attr.ElementName = "<elementName>";
XmlAttributes attrs = new XmlAttributes();
attrs.XmlIgnore = true;
attrs.XmlElements.Add(attr);
XmlAttributeOverrides attrOverrides = new XmlAttributeOverrides();
attrOverrides.Add(typeof(<className>), "<elementName>", attrs);
// use this when deserializing
XmlSerializer s = new XmlSerializer(typeof(<className>), attrOverrides);
// use this when serializing
XmlSerializer s = new XmlSerializer(typeof(<className>));