.NET中如何提取Markdown文件FrontMatter到模型(使用Markdig)
提取Markdown文件中的FrontMatter并转换内容
你可以借助Markdig的YamlFrontMatter扩展来处理开头的---标记内容(也就是FrontMatter),步骤如下:
1. 安装必要的NuGet包
确保已安装Markdig的Yaml扩展包以及YAML解析库:
dotnet add package Markdig.Yaml dotnet add package YamlDotNet
2. 创建博客模型类
定义一个对应FrontMatter字段的模型:
public class BlogPost { public string? Title { get; set; } public string? Description { get; set; } public DateTime? PubDate { get; set; } public string? CoverImage { get; set; } public string? ContentHtml { get; set; } }
3. 配置Markdig管道并处理内容
修改原有代码,添加YamlFrontMatter扩展,同时提取FrontMatter数据:
// 配置Markdig管道,启用YamlFrontMatter扩展 var pipeline = new MarkdownPipelineBuilder() .UseYamlFrontMatter() .Build(); string content = File.ReadAllText(mdFilepath); // 解析Markdown内容 var document = Markdown.Parse(content, pipeline); // 提取FrontMatter数据 var yamlBlock = document.Descendants<YamlFrontMatterBlock>().FirstOrDefault(); var blogPost = new BlogPost(); if (yamlBlock != null) { // 解析YAML内容到模型 var deserializer = new YamlDotNet.Serialization.DeserializerBuilder() .Build(); blogPost = deserializer.Deserialize<BlogPost>(yamlBlock.Content); } // 将正文Markdown转换为HTML(自动排除FrontMatter部分) blogPost.ContentHtml = document.ToHtml(pipeline);
4. 关键说明
UseYamlFrontMatter()会让Markdig识别开头的---块,将其解析为独立的YamlFrontMatterBlock节点- 解析后,原Markdown内容会自动排除FrontMatter部分,转换HTML时仅处理正文内容
- 借助
YamlDotNet可以快速将YAML字符串映射到自定义模型类
内容的提问来源于stack exchange,提问作者Wasim
相关产品推荐
相关产品推荐

