using System.Collections.Generic;
using Newtonsoft.Json.Linq;
public static void Main()
string htmlContent = "<p>Hello, <strong>world!</strong></p>";
string adfResult = ConvertHtmlToAdf(htmlContent);
Console.WriteLine("Converted ADF:");
Console.WriteLine(adfResult);
static string ConvertHtmlToAdf(string htmlContent)
var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(htmlContent);
List<JObject> adfNodes = new List<JObject>();
foreach (var htmlNode in htmlDoc.DocumentNode.ChildNodes)
var adfNode = ConvertHtmlNodeToAdfNode(htmlNode);
var adfDocument = new JObject(new JProperty("version", 1), new JProperty("type", "doc"), new JProperty("content", adfNodes));
return adfDocument.ToString();
static JObject ConvertHtmlNodeToAdfNode(HtmlNode htmlNode)
switch (htmlNode.NodeType)
case HtmlNodeType.Element:
return ConvertHtmlElementToAdfNode(htmlNode);
return ConvertHtmlTextToAdfNode(htmlNode);
static JObject ConvertHtmlElementToAdfNode(HtmlNode htmlElement)
switch (htmlElement.Name.ToLower())
new JProperty("type", "paragraph"),
new JProperty("content", new JArray(ConvertHtmlNodesToAdfNodes(htmlElement.ChildNodes))));
new JProperty("type", "text"),
new JProperty("text", htmlElement.InnerHtml),
new JProperty("marks", new JArray(new JObject(new JProperty("type", "strong")))));
static JObject ConvertHtmlTextToAdfNode(HtmlNode htmlText)
return new JObject(new JProperty("type", "text"), new JProperty("text", htmlText.InnerHtml));
static List<JObject> ConvertHtmlNodesToAdfNodes(HtmlNodeCollection htmlNodes)
var adfNodes = new List<JObject>();
foreach (var htmlNode in htmlNodes)
var adfNode = ConvertHtmlNodeToAdfNode(htmlNode);