Blog/Components/_Shared/JsonRender.razor 1.7 K · 73 lines · raw · history

1 @using System.Text.Json
2 @using Blog.Components.Pages
3 @code {
4
5 [Parameter]
6 public JsonElement? Element { get; set; }
7
8 }
9 @if (Element is { } element)
10 {
11 @switch (element.ValueKind)
12 {
13 case JsonValueKind.Object:
14 {
15 <ul>
16 @foreach (var property in element.EnumerateObject())
17 {
18 <li class="dash">
19 <span class="name">@property.Name</span>
20 <JsonRender Element="property.Value"/>
21 </li>
22 }
23 </ul>
24 break;
25 }
26 case JsonValueKind.Array:
27 {
28 <ol>
29 @foreach (var item in element.EnumerateArray())
30 {
31 <li>
32 <JsonRender Element="item"></JsonRender>
33 </li>
34 }
35 </ol>
36 break;
37 }
38 case JsonValueKind.String:
39 {
40 string value = element.GetString() ?? string.Empty;
41 @if (BRP.LooksLikeBSN(value))
42 {
43 <NavLink href=@BRP.Url(value)>@value</NavLink>
44 }
45 else
46 {
47 <span>@value</span>
48 }
49
50 break;
51 }
52 case JsonValueKind.Null:
53 {
54 <span>Null</span>
55 break;
56 }
57 case JsonValueKind.True:
58 {
59 <span class="json-true">True</span>
60 break;
61 }
62 case JsonValueKind.False:
63 {
64 <span class="json-false">False</span>
65 break;
66 }
67 case JsonValueKind.Number:
68 {
69 <span class="json-number">@element.GetDouble()</span>
70 break;
71 }
72 }
73 }