在Xamarin表单中使用Application.Current.SavePropertiesAsync时,列表未保存

Car*_*gez 2 c# xamarin xamarin.forms

我目前正在尝试以Xamarin形式保存列表。我使用以下代码片段:

var list = new List<myClass> ();

Application.Current.Properties["myList"] = list;
await Application.Current.SavePropertiesAsync();
Run Code Online (Sandbox Code Playgroud)

当我关闭应用程序并使用此代码时...

if (Application.Current.Properties.ContainsKey("myList"))
{

}
Run Code Online (Sandbox Code Playgroud)

...我无法达到这个if陈述。

我读到一些关于人们在使用此解决方案保存列表时遇到的问题,但他们通过将其转换为字符串来解决了。我不确定如何执行此操作。如果我这样做

Application.Current.Properties["myList"] = list.ToString();
Run Code Online (Sandbox Code Playgroud)

...该应用程序崩溃。

我看到有一个名为“ Settings”的插件,如果无法解决此问题,我可能需要使用它,但如果可能的话,我希望使用当前的代码。

EvZ*_*EvZ 5

“属性”字典只能序列化基本类型以进行存储。尝试存储其他类型(例如List可能会静默失败)。

这意味着您无法保存,List因为它不是对象的原始类型。
例如,您可以将其序列化为JSON字符串,然后它将起作用。
代码示例:

var jsonValueToSave = JsonConvert.SerializeObject(myList);
Application.Current.Properties["myList"] = jsonValueToSave;
await Application.Current.SavePropertiesAsync();
Run Code Online (Sandbox Code Playgroud)

List<string>加载回值时,请不要忘记将JSON反序列化为。

请注意,yourList.ToString()在这种情况下将不起作用。更多信息在这里

PS:熟悉官方文档,并在另一个相关主题中查看此帖子。