25

How can I convert markdown into html in .NET?

var markdown = "Some **bold** text";
var output = ConvertMarkdownToHtml(markdown)
// Output: <p>Some <strong>bold</strong> text</p>

I have Markdown text stored in a database that needs to be converted to html when it is displayed.

I know about StackOverflow's WMD Editor (now PageDown), but that only converts client-side.

KyleMit
  • 30,350
  • 66
  • 462
  • 664
Spoike
  • 119,724
  • 44
  • 140
  • 158
  • 4
    Should be re-opened as it's the only question in all of Stack Overflow on converting Markdown to HTML in .NET / C#. Although the problem scope is probably best left to an external library, the question itself no longer seeks one out by default and instead serves as wayfinding to which libs solve that problem and how to implement them. Should remain open to capture changes over time – KyleMit Nov 20 '19 at 22:19
  • 1
    For a well maintained package in 2019, consider [lunet-io / **markdig**](https://github.com/lunet-io/markdig) – KyleMit Nov 20 '19 at 22:44

5 Answers5

27

TL;DR: now it's 2021 use markdig

I just came across this questions and the answers are all quite old. It appears that implementations based on commonmark are the suggested way to go now. Implementations for lots of languages (including C#) can be found here

Matt Keen
  • 329
  • 3
  • 8
14

Another implementation that seems to be gaining ground is MarkdownDeep

This is a full implementation for both C# and JavaScript. The MarkdownHelper on Nuget is using MarkdownDeep now instead of MarkdownSharp.

I've used both and MarkdownDeep seems to be more fully functional and having the JavaScript version is great for quick client side setups.

Bil Simser
  • 1,713
  • 1
  • 19
  • 27
  • Also, MarkdownDeep boasts a significant performance increase compared to MarkdownSharp. This does matter. For instance, I recently discovered that a huge bottleneck in my blog was markdown transforms. It was taking something like 20ms to transform a small blog post, and retrieving the actual post from the database only took 5ms! – Earlz Jun 24 '13 at 02:38
4

Markdown Sharp is what the site uses and is available on NuGet.

Garry Shutler
  • 32,260
  • 12
  • 84
  • 119
3

Check out Markdown Sharp. It's the open source library that resulted from the development of Stack Overflow and is much more robust/actively developed than markdown.net.

Drew Noakes
  • 300,895
  • 165
  • 679
  • 742
1

Markdown Sharp

Markdown Sharp isn't that bad code-wise either as John Leidegren noted, it's just not that easy to comment-out regular expressions or manage complex projects, w in in cleanest-OOP. It is definitely very fast and well-supported. I haven't found a Markup-parser based approach yet. Here is an example:

        pattern = string.Format(@"
            (?:
                (?<=\n\n)           # Starting after a blank line
                |                   # or
                \A\n?               # the beginning of the doc
            )
            (                       # save in $1
                [ ]{{0, {0}}}
                <(hr)               # start tag = $2
                \b                  # word break
                ([^<>])*?           #
                /?>                 # the matching end tag
                [ \t]*
                (?=\n{{2,}}|\Z)     # followed by a blank line or end of document
            )", tabWidth - 1);
        text = Regex.Replace(text, pattern, new MatchEvaluator(HtmlEvaluator), RegexOptions.IgnorePatternWhitespace);
Lorenz Lo Sauer
  • 23,698
  • 16
  • 85
  • 87