是否有一个方法在对象被序列化时调用?

时间:2013-10-09 15:18:43

标签: c#

我正在尝试序列化一个对象,但是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;
    }
}

2 个答案:

答案 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类。