在Blazor中,可以使用ISessionStorage接口来操作会话存储。要传递未知类型的数据,可以使用JsonSerializer类来序列化和反序列化对象。
首先,创建一个名为SessionStorageService的服务类,实现ISessionStorage接口。在该类中,可以使用JsonSerializer类来序列化和反序列化对象。
using System.Text.Json;
using Microsoft.JSInterop;
public class SessionStorageService : ISessionStorage
{
private readonly IJSRuntime _jsRuntime;
public SessionStorageService(IJSRuntime jsRuntime)
{
_jsRuntime = jsRuntime;
}
public async Task GetItem(string key)
{
var json = await _jsRuntime.InvokeAsync("sessionStorage.getItem", key);
return JsonSerializer.Deserialize(json);
}
public async Task SetItem(string key, T value)
{
var json = JsonSerializer.Serialize(value);
await _jsRuntime.InvokeVoidAsync("sessionStorage.setItem", key, json);
}
public async Task RemoveItem(string key)
{
await _jsRuntime.InvokeVoidAsync("sessionStorage.removeItem", key);
}
public async Task Clear()
{
await _jsRuntime.InvokeVoidAsync("sessionStorage.clear");
}
}
然后,在Startup.cs文件的ConfigureServices方法中注册SessionStorageService服务。
public void ConfigureServices(IServiceCollection services)
{
// ...
services.AddScoped();
// ...
}
现在,可以在Blazor组件中注入ISessionStorage服务,并使用它来操作会话存储。
@page "/example"
@inject ISessionStorage SessionStorage
@code {
private async Task SaveData()
{
var data = new { Name = "John", Age = 30 };
await SessionStorage.SetItem("myData", data);
}
private async Task LoadData()
{
var data = await SessionStorage.GetItem("myData");
var name = data.Name;
var age = data.Age;
// Do something with the data
}
}
在上面的示例中,通过SessionStorage.SetItem方法将一个匿名对象保存到会话存储中。然后,通过SessionStorage.GetItem方法将数据加载回来,并使用dynamic类型接收。在此之后,可以根据实际需要访问对象的属性。