0

我正在尝试将我创建的一些类对象保存到我的 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 类的实例而不是字符串,它就不再起作用了。我是否必须首先在会话存储中创建类的实例?如果是,如何。

如果有人知道如何在会话存储中保存“非基本”数据类型的另一种(也许更好)方法,请发表评论。

编辑:布拉德利威尔斯在他的页面上回答了一个评论,说可以使用 Blazored 将对象保存到会话存储中,但没有解释如何。

4

1 回答 1

2

您需要将对象转换为 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);

You can also use the new .net core System.Text.Json

using System.Text.Json;
using System.Text.Json.Serialization;

Convert object to string:

string json = JsonSerializer.ToString<MyCustomObject>(myCustomObject);
await sessionStorage.SetItemAsync<string>("sample", json);

Convert string to object:

json = await sessionStorage.GetItemAsync<string>("sample");
MyCustomObject myCustomObject = JsonSerializer.Parse<MyCustomObject>(json);
于 2020-09-01T10:34:03.920 回答