在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
类型接收。在此之后,可以根据实际需要访问对象的属性。