是否有在反序列化对象时调用的方法
本文关键字:调用 方法 对象 反序列化 是否 | 更新日期: 2023-09-27 18:34:40
我正在尝试序列化一个对象,但HttpClient导致了问题。我不能序列化 HttpClient - 我个人也不想序列化 - 但是当对象被反序列化时,我需要确保 HttpClient 可用于发出请求。
是否有在反序列化对象时调用的方法,以便我可以确保创建 HttpClient 对象并且它可供使用?
下面是一个示例。这个想法是用户保存会话,序列化的文件保存到磁盘。当用户加载文件时,cookieJar 将恢复用户的 Twitter 会话,这意味着他们不必重新登录(如果 cookie 会话仍然有效(。我可以只存储 CookieCollection,但是,对象中还有其他数据也需要存储。因此,我为什么要这样做。
[serializable()]
public class Twitter
{
private HttpClient client;
private CookieContainer cookieJar;
private String username, password;
public Twitter(string _username, string _password)
{
username = _username;
password = _password;
}
}
回答最初的问题:IDeserializationCallback
为此目的而存在的。
[Serializable]
public class Twitter : IDeserializationCallback
{
#region IDeserializationCallback
void IDeserializationCallback.OnDeserialization(Object sender)
{
}
#endregion
}
或者,您可以使用[OnDeserialized]
:
[Serializable]
public class Twitter
{
[OnDeserialized]
void OnDeserialized(Object sender)
{
}
}
顺便说一句,我会考虑将[NonSerialized]
应用于HttpClient和CookieContainer,并在默认ctor中启动它们。
我会创建一个 DTO 来序列化和加载磁盘中的数据。
public class TwitterData
{
public string UserName { get; set; }
public string EncryptedPassword { get; set; }
public string SessionKey { get; set; }
public CookieContainer CookieContainer { get; set; }
}
然后,您可以从 DTO 重建Twitter
类。