I want to export a CookieContainer to JSON using Newtonsoft.Json but unfortunately CookieContainer hasn't an enumerator or stuff, so I can't cycle through it ...
Edit: With my posted solution it would be something like this:
private static void Main(string[] args) {     CookieContainer cookieContainer = new CookieContainer();     cookieContainer.Add(new Cookie("name1", "value1", "/", ".testdomain1.com"));     cookieContainer.Add(new Cookie("name2", "value1", "/path1/", ".testdomain1.com"));     cookieContainer.Add(new Cookie("name2", "value1", "/path1/path2/", ".testdomain1.com"));     cookieContainer.Add(new Cookie("name1", "value1", "/", ".testdomain2.com"));     cookieContainer.Add(new Cookie("name2", "value1", "/path1/", ".testdomain2.com"));     cookieContainer.Add(new Cookie("name2", "value1", "/path1/path2/", ".testdomain2.com"));      CookieCollection cookies = GetAllCookies(cookieContainer);      Console.WriteLine(JsonConvert.SerializeObject(cookies, Formatting.Indented));     Console.Read(); } A solution using reflection:
public static CookieCollection GetAllCookies(CookieContainer cookieJar) {     CookieCollection cookieCollection = new CookieCollection();      Hashtable table = (Hashtable) cookieJar.GetType().InvokeMember("m_domainTable",                                                                     BindingFlags.NonPublic |                                                                     BindingFlags.GetField |                                                                     BindingFlags.Instance,                                                                     null,                                                                     cookieJar,                                                                     new object[] {});      foreach (var tableKey in table.Keys)     {         String str_tableKey = (string) tableKey;          if (str_tableKey[0] == '.')         {             str_tableKey = str_tableKey.Substring(1);         }          SortedList list = (SortedList) table[tableKey].GetType().InvokeMember("m_list",                                                                     BindingFlags.NonPublic |                                                                     BindingFlags.GetField |                                                                     BindingFlags.Instance,                                                                     null,                                                                     table[tableKey],                                                                     new object[] { });          foreach (var listKey in list.Keys)         {             String url = "https://" + str_tableKey + (string) listKey;             cookieCollection.Add(cookieJar.GetCookies(new Uri(url)));         }     }      return cookieCollection; } Finally, .NET 6 was released and introduced the CookieContainer.GetAllCookies() method which extracts the CookieCollection - Documentation link.
public System.Net.CookieCollection GetAllCookies(); If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With