@using System.Text.Json @using System.Text.Json.Nodes @using ArcaneLibs.Blazor.Components.Services @using ArcaneLibs.Extensions @using LibMatrix.Helpers @inject BlazorSaveFileService SaveFileService
RoomBuilder state Show null values
Save
                @RoomBuilder.ToJson(ignoreNull: !ShowNullInState)
            
@code { [Parameter] public required RoomBuilder RoomBuilder { get; set; } [Parameter] public required EventCallback RoomBuilderChanged { get; set; } [Parameter] public required Action PageStateHasChanged { get; set; } private bool ShowNullInState { get; set; } private async Task SaveFile() { Console.WriteLine("Saving room builder state to file..."); await SaveFileService.SaveFileAsync("room-builder.json", RoomBuilder.ToJson(), "application/json"); } private async Task LoadFile(InputFileChangeEventArgs e) { if (!RoomBuilderChanged.HasDelegate) throw new InvalidOperationException("RoomBuilderChanged must have a delegate."); if (e.FileCount == 0) return; Console.WriteLine("Loading room builder state from file..."); var stream = e.File.OpenReadStream(4 * 1024 * 1024 * 1024L); var json = await JsonSerializer.DeserializeAsync(stream); if (json is null) { Console.WriteLine("Failed to deserialize JSON from file."); return; } if (json.ContainsKey(nameof(RoomUpgradeBuilder.UpgradeOptions))) { Console.WriteLine("Got room upgrade builder state."); RoomBuilder = json.Deserialize(); } else { Console.WriteLine("Got room builder state."); RoomBuilder = json.Deserialize(); } await RoomBuilderChanged.InvokeAsync(RoomBuilder); PageStateHasChanged(); Console.WriteLine("Room builder state loaded from file."); } }