gpt4 book ai didi

c# - 如何使用 OnSerializing 和 OnDeserializing 属性?

转载 作者:数据小太阳 更新时间:2023-10-29 02:08:39 27 4
gpt4 key购买 nike

我曾尝试在我的 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]);
}
}
}

最佳答案

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

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

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

关于c# - 如何使用 OnSerializing 和 OnDeserializing 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17805988/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com