Есть json код расположенный на сайте в теге <script>, как можно его спарсить, десериализовать и использовать в c# коде?
Asked
Active
Viewed 128 times
0
Pyt
- 25
- 4
1 Answers
0
*Текущее решение: Отправляю post:
using (Stream dataStream = Response.GetRequestStream())
{
dataStream.Write(bytes, 0, bytes.Length);
}
Получаю ответ:
using (var response = (HttpWebResponse)Response.GetResponse())
using (Stream stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream))
{
return reader.ReadToEnd();
}
получаю из ответа нужный тег(AngleSharp'ом через селектор):
var parser = new HtmlParser();
var doc = parser.ParseDocument(html);
var resStr = doc.QuerySelector(selector).TextContent;
обрезаю(название функции JS и ";") полученную строку String.Substring()'ом, полученную строку отправляю в десериализатор и готово)*:
return (List<T>)JsonSerializer.Deserialize(str, typeof(List<T>));
P.S. Уверен, что можно сделать и лучше, если знаете как, напишите
-
1пара советов 1)
HttpWebRequestустарел, используйтеHttpClient2)return JsonSerializer.Deserialize<List<T>>(str)использование дженерик методов улучшает читабельность кода 3) весь ваш код синхронный, если он будет выполняться в UI потоке, приложение будет подвисать на время запроса – aepot Feb 11 '21 at 06:47 -
string html = await client.GetStringAsync(url)- отправить GET и получить ответ от сервера с помощьюHttpClientможно так. – aepot Feb 11 '21 at 06:53 -
1пример - смотрите методы
GetPageAsyncиPostFormAsync, а можете просто взять этот класс и использовать как готовое решение для работы с сетью. – aepot Feb 11 '21 at 07:10
<script>регексом,AngleSharpили чем угодно. 2. Создаете соответствующий структуре вашего джисона класс обертку(можно создать классы автоматом, прям из VS спец вставка в меню) 3. Используя, например Newtonsoft и ваш класс-обертку дессерилизуете джисон. Все