[英]Selectively Serialize and Deserialize
我的Linq-To-Sql映射中有一个User对象。 当用户提交时,我想要反序列化一个密码属性 - 例如,在登录期间。 但是,我从不想将此属性传递给用户,因为它将包含实际密码的加密版本,而我宁愿不公开有关密码或加密方法的任何信息。 有没有办法在对象范围内告诉Linq-To-Sql在返回User对象时永远不会传递Password属性?
我使用https进行加密,主要是因为只是在访问服务时,您默认强制执行加密,这样可以节省客户端代码。 你有几个可能的答案:
如果您没有腌制和散列密码,请考虑一下。
在我从不想序列化对象的情况下,最好挂钩OnSerializing事件。 由于我正在使用Linq-To-Sql,我的DataContext的designer.cs已经捕获了OnSerializing事件,用于跟踪lazing加载实体引用的序列化状态。 添加[OnSerializing]
修饰的另一个函数会在System.ServiceModel.Activation中引发错误,所以我必须找到另一个路径。 这是我的解决方案:
在DataContext.designer.cs中,我补充道
[global::System.Runtime.Serialization.OnSerializingAttribute()]
[global::System.ComponentModel.EditorBrowsableAttribute(EditorBrowsableState.Never)]
public void OnSerializing(StreamingContext context)
{
this.serializing = true;
// custom function to handle my logic
this.ClearPassword();
}
在我的User.cs文件中,我有一个部分类定义。 因此,我需要做的就是将ClearPassword方法添加到我的部分类定义中:
partial class User
{
private void ClearPassword()
{
this.Password = null;
}
//* OTHER CODE *//
}
现在,无论我如何与User对象进行交互,密码都不会根据需要传递给客户端。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.