我正在尝试序列化一个对象,但是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;
}
}
答案 0 :(得分:1)
要回答原始问题: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中旋转它们。
答案 1 :(得分:0)
我会创建一个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
类。