如何使用OnSerializing和OnDeserializing属性

本文关键字:OnDeserializing 属性 OnSerializing 何使用 | 更新日期: 2023-09-27 18:24:17

我曾尝试在xml中实现自动加密和解密,但它不仅有效,即数据未加密。原因可能是什么?我的代码如下所示。我正在使用XmlSerializer类。感谢

[Serializable]
public class User
{
    public string _username;
    public string _password;
    public string[] _roles;
    [XmlIgnore]
    public string Username
    {
        get { return _username; }
        set { _username = value; }
    }
    [XmlIgnore]
    public string Password
    {
        get { return _password; }
        set { _password = value; }
    }
    [XmlIgnore]
    public string[] Roles
    {
        get { return _roles; }
        set { _roles = value; }
    }
    [OnDeserializingAttribute]
    internal void DecryptPersonalData(StreamingContext context)
    {
        _username = Crypto.Decrypt(_username);
        _password = Crypto.Decrypt(_password);
        for (int i = 0; i < _roles.Length; i++)
        {
            _roles[i] = Crypto.Decrypt(_roles[i]);
        }
    }
    [OnSerializingAttribute]
    internal void EncryptPersonalData(StreamingContext context)
    {
        _username = Crypto.Encrypt(_username);
        _password = Crypto.Encrypt(_password);
        for (int i = 0; i < _roles.Length; i++)
        {
            _roles[i] = Crypto.Encrypt(_roles[i]);
        }
    }
}

如何使用OnSerializing和OnDeserializing属性

OnDeserializing未被XmlSerializer使用。。。。使用XmlSerializer执行自定义序列化,从中派生,并处理IXmlDeserializationCallback接口。

  • 当你';是否已通过XML序列化加载

这里有一个建议的解决方法(基本上,你会创建一个"Twin"类,在它的get中返回加密数据,并在它的集合中进行解加密……你不会只在序列化任务中使用"Twin"……从User复制到User2中)。

  • http://codethatworks.wordpress.com/2009/11/15/xmlserializer-and-using-onserializing-ondeserialized-attributes/

或者,您可以使用DataContractSerializer(但它的限制性在于,它不支持XML属性,只支持序列化流中的元素)。

  • XML序列化-何时使用DataContractSerializer/Binary/XML序列化程序