我正在尝试将我创建的类的一些对象保存到Blazor-Wasm应用程序的会话存储中,以在刷新后保存状态(F5(。我学习了Bradley Wells的教程(https://wellsb.com/csharp/aspnet/blazor-write-to-localstorage/)假设如果我使用会话存储而不是本地存储,那么一切都类似。
如果我使用字符串这样的基本数据类型来尝试我的代码,它就像一个魅力,值"测试消息";刷新页面后仍显示。
protected override async Task OnInitializedAsync()
{
testString = await sessionStorage.GetItemAsync<string>("sample");
}
// Method gets triggered on button press
async Task TestMethodCanBeDeleted()
{
testString = "testmessage";
await sessionStorage.SetItemAsync<string>("sample", testString);
}
当我尝试保存例如类MyCustomObject的实例而不是字符串时,它就不再工作了。我必须首先在会话存储中创建该类的实例吗?如果是,如何。
如果有人知道另一种(也许更好的(方法来拯救";"非基本";会话存储中的数据类型,请发表评论。
编辑:Bradley Wells在他的页面上回答了一条评论,他写道可以使用Blazored将对象保存到会话存储,但没有解释如何保存。
您需要将对象转换为json或任何其他字符串格式,以便将其保存在会话中。当您取回它时,您可以将json转换为您的对象。
要转换为json,可以使用Newtonsoft json.NET
using Newtonsoft.Json;
将对象转换为字符串:
string json = JsonConvert.SerializeObject(myCustomObject);
await sessionStorage.SetItemAsync<string>("sample", json);
将字符串转换为对象:
json = await sessionStorage.GetItemAsync<string>("sample");
MyCustomObject myCustomObject = JsonConvert.DeserializeObject<MyCustomObject>(json);
您还可以使用新的.net核心System.Text.Json
using System.Text.Json;
using System.Text.Json.Serialization;
将对象转换为字符串:
string json = JsonSerializer.ToString<MyCustomObject>(myCustomObject);
await sessionStorage.SetItemAsync<string>("sample", json);
将字符串转换为对象:
json = await sessionStorage.GetItemAsync<string>("sample");
MyCustomObject myCustomObject = JsonSerializer.Parse<MyCustomObject>(json);