@using System.Text.Json @using System.Text.Json.Serialization @code { [Parameter, EditorRequired] public required string Headline { get; set; } [Parameter, EditorRequired] public required string PreviewImage { get; set; } [Parameter] public string? PreviewFallbackImage { get; set; } [Parameter, EditorRequired] public DateTime PublishedDate { get; set; } [Parameter, EditorRequired] public required string Author { get; set; } private MarkupString StructuredDataJson { get; set; } private readonly JsonSerializerOptions jsonOptions = new() { WriteIndented = true }; protected override async Task OnParametersSetAsync() { var article = new NewsArticle { Context = "https://schema.org", Type = "NewsArticle", Headline = Headline, Author = Author, Image = [PreviewImage], DatePublished = PublishedDate.ToString("o"), DateModified = PublishedDate.ToString("o") }; if (!string.IsNullOrWhiteSpace(PreviewFallbackImage)) { article.Image.Add(PreviewFallbackImage); } StructuredDataJson = (MarkupString)JsonSerializer.Serialize(article, jsonOptions); await base.OnParametersSetAsync(); } private sealed class NewsArticle { [JsonPropertyName("@context")] public required string Context { get; set; } [JsonPropertyName("@type")] public required string Type { get; set; } [JsonPropertyName("headline")] public required string Headline { get; set; } [JsonPropertyName("author")] public required string Author { get; set; } [JsonPropertyName("image")] public List Image { get; set; } = []; [JsonPropertyName("datePublished")] public required string DatePublished { get; set; } [JsonPropertyName("dateModified")] public required string DateModified { get; set; } } }