首页 > 解决方案 > 如何在 C# 中解析/反序列化文本序列化的 HTML。.Net 中是否有任何实用程序或类可用

问题描述

我正在从 REST API 获取序列化的 HTML(响应标头中的内容类型是“text/html”)。我应该如何解析/反序列化并将其存储为有效的 HTML 页面。

这是示例:

"html lang=\"en-US\">\r\n\t<head>\r\n\t\t<title>page1</title>\r\n\t\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\r\n\t\t<meta name=\"created\" content=\"2020-04-23T01:26:00.0000000\" />\r\n\t</head>\r\n\t<body data-absolute-enabled=\"true\" style=\"font-family:Calibri;font-size:11pt\">\r\n\t\t<div style=\"position:absolute;left:48px;top:115px;width:614px\">\r\n\t\t\t<p style=\"margin-top:0pt;margin-bottom:0pt\">This is test page</p>\r\n\t\t</div>\r\n\t\t<div style=\"position:absolute;left:327px;top:102px;width:624px\">\r\n\t\t\t<table style=\"border:1px solid;border-collapse:collapse\">\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td style=\"border:1px solid\"><br />\r\n\t\t\t\t\t</td>\r\n\t\t\t\t</tr>\r\n\t\t\t</table>\r\n\t\t\t<br />\r\n\t\t</div>\r\n\t\t<!-- InkNode is not supported -->\r\n\t\t<div style=\"position:absolute;left:399px;top:39px;width:624px\">\r\n\t\t\t<img alt=\"Water Buffalo\" width=\"256\" height=\"256\" src=\"https://graph.microsoft.com/v1.0/users('d2e7f1e9-3c9e-4f7a-8b6b-2302fee8af6a')/onenote/resources/1-8ea29e7dc05f4dedb229ed86f5b10b84!1-38E1572A-084A-4B2A-A530-2370B83A8542/$value\" data-src-type=\"image/png\" data-fullres-src=\"https://graph.microsoft.com/v1.0/users('d2e7f1e9-3c9e-4f7a-8b6b-2302fee8af6a')/onenote/resources/1-8ea29e7dc05f4dedb229ed86f5b10b84!1-38E1572A-084A-4B2A-A530-2370B83A8542/$value\" data-fullres-src-type=\"image/png\" />\r\n\t\t\t<br />\r\n\t\t</div>\r\n\t\t<div style=\"position:absolute;left:381px;top:375px;width:624px\">\r\n\t\t\t<img alt=\"Water Buffalo\" width=\"256\" height=\"256\" src=\"https://graph.microsoft.com/v1.0/users('d2e7f1e9-3c9e-4f7a-8b6b-2302fee8af6a')/onenote/resources/1-199df58a10154beebca3ca2ac4c69e4e!1-38E1572A-084A-4B2A-A530-2370B83A8542/$value\" data-src-type=\"image/png\" data-fullres-src=\"https://graph.microsoft.com/v1.0/users('d2e7f1e9-3c9e-4f7a-8b6b-2302fee8af6a')/onenote/resources/1-199df58a10154beebca3ca2ac4c69e4e!1-38E1572A-084A-4B2A-A530-2370B83A8542/$value\" data-fullres-src-type=\"image/png\" />\r\n\t\t\t<br />\r\n\t\t</div>\r\n\t\t<div style=\"position:absolute;left:57px;top:111px;width:624px\">\r\n\t\t\t<img alt=\"Water Buffalo\" width=\"256\" height=\"256\" src=\"https://graph.microsoft.com/v1.0/users('d2e7f1e9-3c9e-4f7a-8b6b-2302fee8af6a')/onenote/resources/1-8fe32926b9994022bc29527b6590f007!1-38E1572A-084A-4B2A-A530-2370B83A8542/$value\" data-src-type=\"image/png\" data-fullres-src=\"https://graph.microsoft.com/v1.0/users('d2e7f1e9-3c9e-4f7a-8b6b-2302fee8af6a')/onenote/resources/1-8fe32926b9994022bc29527b6590f007!1-38E1572A-084A-4B2A-A530-2370B83A8542/$value\" data-fullres-src-type=\"image/png\" />\r\n\t\t\t<br />\r\n\t\t</div>\r\n\t</body>\r\n</html>\r\n"

标签: c#asp.net.netasp.net-mvcrest

解决方案


当您无法立即将其解释为 HTML 时,将Content-Type标头设置为似乎不合适。text/html我认为application/json如果它确实是 JSON 转义的,它似乎更合适。

在这种情况下,您可以简单地Regex.Unescape("...")将转义字符(例如\n\")替换为它们所代表的实际字符。


推荐阅读