XmlIgnore仅在序列化中

时间:2014-09-24 18:51:23

标签: c# xml serialization deserialization xmlignore

        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]它只能用于反序列化?

1 个答案:

答案 0 :(得分:1)

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>));