using System.Threading.Tasks;
using YamlDotNet.Serialization;
using YamlDotNet.Serialization.NamingConventions;
public static class MarkdownParser
public static async Task<T> ParseSettingsAsync<T>(this Stream file, bool withBody = false)
where T : ISettings, new()
StringBuilder builder = new();
using StreamReader reader = new(file);
await reader.ReadLineAsync();
while (await reader.ReadLineAsync() is { } line && line != "---")
builder.AppendLine(await reader.ReadLineAsync());
string bodyPart = await reader.ReadToEndAsync();
IDeserializer deserializer = new DeserializerBuilder()
.WithNamingConvention(PascalCaseNamingConvention.Instance)
T result = deserializer.Deserialize<T>(builder.ToString());
public interface ISettings
public string? Body { get; set; }
public class FrontPageSettings : ISettings
[YamlMember(Alias = "title", SerializeAs = typeof(string))]
public string Title { get; set; }
[YamlMember(Alias = "hero_settings", SerializeAs = typeof(HeroSettings))]
public HeroSettings HeroSettings { get; set; }
[YamlMember(Alias = "client_header", SerializeAs = typeof(Header))]
public Header ClientHeader { get; set; }
[YamlMember(Alias = "clients", SerializeAs = typeof(ClientItemData))]
public ClientItemData Clients { get; set; }
[YamlMember(Alias = "services_header", SerializeAs = typeof(Header))]
public Header ServicesHeader {get; set; }
[YamlMember(Alias = "services", SerializeAs = typeof(Feature))]
public Feature Services { get; set; }
[YamlMember(Alias = "expertise_header", SerializeAs = typeof(Header))]
public Header ExpertiseHeader { get; set; }
[YamlMember(Alias = "expertise", SerializeAs = typeof(Feature))]
public Feature Expertise { get; set; }
[YamlMember(Alias = "about_header", SerializeAs = typeof(Header))]
public Header AboutHeader { get; set; }
[YamlMember(Alias = "about", SerializeAs = typeof(SAbout))]
public SAbout About { get; set; }
[YamlMember(Alias = "partnerships_header", SerializeAs = typeof(Header))]
public Header PartnershipsHeader { get; set; }
[YamlMember(Alias = "partnerships", SerializeAs = typeof(SPartnerships))]
public SPartnerships Partnerships { get; set; }
[YamlMember(Alias = "body", SerializeAs = typeof(string))]
public string? Body { get; set; }
[YamlMember(Alias = "title", SerializeAs = typeof(string))]
public string Title { get; set; }
[YamlMember(Alias = "subtitle", SerializeAs = typeof(string))]
public string Subtitle { get; set; }
public class HeroSettings
[YamlMember(Alias = "title", SerializeAs = typeof(string))]
public string Title { get; set; }
[YamlMember(Alias = "subtitle", SerializeAs = typeof(string))]
public string SubTitle { get; set; }
[YamlMember(Alias = "button_text", SerializeAs = typeof(string))]
public string ButtonText { get; set; } = "neem contact op!";
[YamlMember(Alias = "name", SerializeAs = typeof(string))]
public string Name { get; set; }
[YamlMember(Alias = "function", SerializeAs = typeof(string))]
public string Function { get; set; }
[YamlMember(Alias = "lead_mct", SerializeAs = typeof(bool))]
public bool LeadMct { get; set; }
[YamlMember(Alias = "mct", SerializeAs = typeof(bool))]
public bool Mct { get; set; }
[YamlMember(Alias = "mvp", SerializeAs = typeof(bool))]
public bool Mvp { get; set; }
[YamlMember(Alias = "image", SerializeAs = typeof(string))]
public string Image { get; set; }
public class SContactInfo
[YamlMember(Alias = "street", SerializeAs = typeof(string))]
public string Street { get; set; }
[YamlMember(Alias = "zip_code", SerializeAs = typeof(string))]
public string ZipCode { get; set; }
[YamlMember(Alias = "city", SerializeAs = typeof(string))]
public string City { get; set; }
[YamlMember(Alias = "opening_times", SerializeAs = typeof(string))]
public string OpeningTimes { get; set; }
[YamlMember(Alias = "email", SerializeAs = typeof(string))]
public string Email { get; set; }
public class SPartnerships
[YamlMember(Alias = "image", SerializeAs = typeof(string))]
public string Image { get; set; }
public class ClientItemData
[YamlMember(Alias = "link", SerializeAs = typeof(string))]
public string Link { get; set; }
[YamlMember(Alias = "logo", SerializeAs = typeof(string))]
public string Logo { get; set; }
[YamlMember(Alias = "title", SerializeAs = typeof(string))]
public string Title { get; set; }
[YamlMember(Alias = "subtitle", SerializeAs = typeof(string))]
public string SubTitle { get; set; }
[YamlMember(Alias = "content", SerializeAs = typeof(string))]
public string Content { get; set; }
[YamlMember(Alias = "image_path", SerializeAs = typeof(string))]
public string ImagePath { get; set; }