1

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

2 回答 2

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 中启动它们。

于 2013-10-09T15:22:35.820 回答
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; }
}

Twitter然后你可以从 DTO重建类。

于 2013-10-09T15:37:42.603 回答