0
        private string _password;

        public string Password
        {
            get 
            {
                return _password; 
            }
            set
            {
                if (_password != value)
                {
                    _password = PasswordEncryptor.Encode(value);
                    OnPropChanged("Password");                
                }
            }
        }

PasswordEncryptorEncodeエンコードするメソッドを呼び出すクラスです。Passwordがエンコードされた後、XmlSerializerディスク内のファイルにシリアル化されます。ただし、プログラムが起動するたびに、ファイルは逆シリアル化されset、で再PasswordEncryptor.Encode()エンコードPasswordされます。[XmlIgnore]逆シリアル化でのみできる方法はありますか?

4

1 に答える 1

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>));
于 2014-09-24T19:01:17.310 に答える