使用 System.Text.Json 反序列化 JSON 编码的 HTML 代码

Deserialize JSON encoded HTML code with System.Text.Json

我正在使用 C# 调用 REST API,其中 returns 一个包含 HTML 代码的 JSON 对象。这是我感兴趣的对象的示例

{    
    "Body": "<html class=\"sg-campaigns\"><head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><meta content=\"text/html; charset=utf-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1\"><meta content=\"IE=Edge\"><style type=\"text/css\">\r\n<!--\r\nbody ..."
}

我想进一步处理 HTML 代码,但由于它包含各种有效元素 JSON 使用 System.Text.Json 的字符串反序列化失败并出现以下异常

System.Text.Json.JsonReaderException: '<' is an invalid start of a value.

我试过使用下面的代码反序列化 Body 属性的内容

var options = new JsonSerializerOptions()
{
    Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping,
    WriteIndented = true
};

var content = JsonSerializer.Deserialize<String>(html, options);

导致错误的元素例如:

我很想知道如何将上面代码中的 Body 属性清除为仅包含有效的 HTML,也许社区中有人对此有想法。

创建一个包含 Body 属性(以及您将要使用的任何其他属性)的简单对象:

internal class ResponseObject
{
    public string Body { get; set; }
}

然后将响应 JSON 反序列化为该类型的对象而不是 String。:

var content = JsonSerializer.Deserialize<ResponseObject>(html, options);

Content.Body 将包含解码后的 HTML.