@using System.Text.Json
@if (Element.ValueKind == JsonValueKind.Array) { @if (Element.GetArrayLength() == 0) { Empty } else { var i = 0; @foreach (var item in Element.EnumerateArray()) { @switch (item.ValueKind) { case JsonValueKind.Array:
@i: []
break; case JsonValueKind.Object:
@i: {}
break; default:
@i:
break; } @RenderElement(item) i++; } } } else if (Element.ValueKind == JsonValueKind.Object) { @foreach (var prop in Element.EnumerateObject()) { @switch (prop.Value.ValueKind) { case JsonValueKind.Array:
@prop.Name: []
break; case JsonValueKind.Object:
@prop.Name: {}
break; default:
@prop.Name:
break; } @RenderElement(prop.Value) } }
@code { [Parameter, EditorRequired] public required JsonElement Element { get; set; } RenderFragment RenderElement(JsonElement element) { return element.ValueKind switch { JsonValueKind.True or JsonValueKind.False or JsonValueKind.Null or JsonValueKind.Undefined => (@
@element.ValueKind.ToString()
), JsonValueKind.Array or JsonValueKind.Object => (@
), JsonValueKind.Number => (@
@element.GetDouble()
), JsonValueKind.String => (element.GetString() is { } s && s.StartsWith("https://") && Uri.TryCreate(s, UriKind.Absolute, out var _) ? @
@s
: @
"@element.GetString()?.ReplaceLineEndings("\\n")"
), _ => throw new ArgumentOutOfRangeException() }; } }