如何解决将自定义对象保存在Blazor WebAssembly应用程序的会话存储中使用Blazored.SessionStorage
我试图将我创建的某些类的对象保存到Blazor Wasm应用程序的会话存储中,以保存刷新后的状态(F5)。我遵循了Bradley Wells(https://wellsb.com/csharp/aspnet/blazor-write-to-localstorage/)的教程,假设如果我使用会话存储而不是本地存储,则一切工作都类似。
如果我使用诸如字符串之类的基本数据类型尝试代码,那么它就像一个超级按钮一样工作,刷新页面后仍显示“ testmessage”值。
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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。