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);
}
1.Определяю тип, в моем случае на выходе получаю один из этих вариантов: а)список б)объект который имеет поля(Properties) в)простой тип(т.е. к чему можно применить ToString() чтоб узнать что в нем)
2.если это список то пробегаюсь так
foreach(dynamic item in items)
{
...
}
и к item применяю п.1
3.если это объект с полями, через reflection достаю все поля(точнее если это классы созданы Linq2SQL, то те что отмечены атрибутом ColumnAttribute, у остальных все), далее через reflection достаю содержимое так
property.GetValue(item, null)
и к нему опять применяю п.1
Т.е. в нескольких рекурсиях я могу разобрать все объекты. Но это решение мне не очень нравится, поэтому хотел услышать другие варианты.