@Grasinki

Сохранения и чтения cookie, из текстового файла в xNet?

В общем сохраняю:

CookieDictionary cookieDictionary = new CookieDictionary(false);
httpRequest.Cookies = cookieDictionary; 
File.AppendAllText("Cookies_" + textBox1.Text + ".txt", Convert.ToString(cookieDictionary));

Читаю:

string[] Mass = File.ReadAllLines("Cookies_" + textBox1.Text + ".txt", System.Text.Encoding.Default);
string ref  = Pars(Mass[0] + "", "ref=(.*?);", 1);
string  enabled = Pars(Mass[0] + ";", " enabled=(.*?);", 1);
string se = Pars(Mass[0] + ";", "se=(.*?);", 1);

Подставляю:
httpRequest.Cookies = new CookieDictionary
{
  { "ref", ref },
  { "enabled", enabled },
  { "se", se }
};


Вопрос:
Изящней можно ли как-то сотворить сие чудо ?
  • Вопрос задан
  • 1208 просмотров
Решения вопроса 1
AlekseyNemiro
@AlekseyNemiro
full-stack developer
Использовать базу данных :-)

Можно попробовать сериализовать CookieDictionary, но Dictionary видимо намекает, что это будет непросто. Если не получится, то можно попробовать сделать свой, сериализуемый, CookieDictionary и использовать его.

С JSON наверное проблем будет меньше, по крайней мере обычный Dictionary с помощью Newtonsoft.Json можно без проблем сериализовать/десериализовать.

Можно попробовать с CookieDictionary, примерно так:

// получаем json:
string json = JsonConvert.SerializeObject(cookieDictionary);

// получаем экземпляр CookieDictionary из json:
var cookieDictionary2 = JsonConvert.DeserializeObject<CookieDictionary>(json);

Если с сериализацией будут проблемы и при преобразовании экземпляра CookieDictionary в строку на выходе всегда получается строка вида: ключ=значение; ключ=значение, то можно разбить эту строку и получить коллекцию:

// string cookiesRaw = File.ReadAllText(string.Format("Cookies_{0}.txt", textBox1.Text));
string cookiesRaw = "ключ1=значение1; ключ2=значение2";
var cookies = cookiesRaw.Split(';').Select(itm => itm.Split('=')).
              ToDictionary(k => k[0].Trim(), v => v[1].Trim());

В переменной cookies будет экземпляр Dictionary, который можно попробовать преобразовать в CookieDictionary (зависит от реализации), либо создать и наполнить экземпляр CookieDictionary.

httpRequest.Cookies = new CookieDictionary();

foreach(var item in cookies)
{
  httpRequest.Cookies.Add(item.Key, item.Value);
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы