• ASP.NET - как просматривать содержимое кеша

    @AigizK Автор вопроса
    Да, мой текущий вариант и работает в связки Reflection и dynamic. логика примерно следующая:
    1.Определяю тип, в моем случае на выходе получаю один из этих вариантов: а)список б)объект который имеет поля(Properties) в)простой тип(т.е. к чему можно применить ToString() чтоб узнать что в нем)
    2.если это список то пробегаюсь так
    foreach(dynamic item in items)
    {
    ...
    }

    и к item применяю п.1
    3.если это объект с полями, через reflection достаю все поля(точнее если это классы созданы Linq2SQL, то те что отмечены атрибутом ColumnAttribute, у остальных все), далее через reflection достаю содержимое так
    property.GetValue(item, null)
    и к нему опять применяю п.1

    Т.е. в нескольких рекурсиях я могу разобрать все объекты. Но это решение мне не очень нравится, поэтому хотел услышать другие варианты.
  • ASP.NET - как просматривать содержимое кеша

    @AigizK Автор вопроса
    Вопрос не в том, как достать какие есть у меня ключи. мне надо доставать именно содержимое по этому ключу и отобразить его на экране. А проблема состоит в следующим:
    Пусть у меня cache[«A»]=new DataTable() и cache[«B»]=5
    Соответственно при отображение числа, строки и даты могу просто сделать ToString(), а для таблицы должен пробежаться по всем колонкам и строчкам, чтоб увидит содержимое ячейки. Но кроме этих типов есть еще куча других(списки с разными типами, классы таблиц, которых сгенерил LINQ и т.д.)
  • Определение кодировки текста на .NET

    @AigizK Автор вопроса
    Да, то что искал. Вот код, который по URL возвращает HTML код:

    string GetHtmlByUrl(string url)
            {
                WebClient client = new WebClient();
                var data = client.DownloadData(url);
    
                Encoding enc = Encoding.UTF8;
    
                using (MemoryStream stream = new MemoryStream())
                {
                    stream.Write(data, 0, data.Length);
                    //каретку если не перенести на начало,то получите null
                    stream.Seek(0, SeekOrigin.Begin);
                    ICharsetDetector cdet = new CharsetDetector();
    
                    cdet.Feed(stream);
                    cdet.DataEnd();
    
                    if (cdet.Charset != null)
                    {
                        enc = Encoding.GetEncoding(cdet.Charset);
                    }
                }
    
                return enc.GetString(data);
            }