【问题标题】:How can I store lists in Xamarin Forms?如何在 Xamarin Forms 中存储列表?
【发布时间】:2019-02-27 10:25:07
【问题描述】:
有没有办法使用 Xamarin Forms 本地存储列表?
【问题讨论】:
标签:
c#
xamarin
xamarin.forms
xamarin.android
xamarin.ios
【解决方案1】:
Xamarin 设置插件已过时且不再维护。它的功能已被整合到 Xamarin.Essentials 中,建议继续使用。
添加Newtonsoft.Json NuGet Package 和Xamarin.Essentials NuGet Package
利用Newtonsoft.Json.JsonConvert 序列化/反序列化List<T> 到/从string 并使用Xamarin.Essentials.Preferences 保存/检索它
using System;
using Newtonsoft.Json;
using Xamarin.Essentials;
namespace YourNamespace
{
static class Preferences
{
public static List<string> SavedList
{
get
{
var savedList = Deserialize<List<string>>(Preferences.Get(nameof(SavedList), null));
return savedList ?? new List<string>();
}
set
{
var serializedList = Serialize(value);
Preferences.Set(nameof(SavedList), serializedList);
}
}
static T Deserialize<T>(string serializedObject) => JsonConvert.DeserializeObject<T>(serializedObject);
static string Serialize<T>(T objectToSerialize) => JsonConvert.SerializeObject(objectToSerialize);
}
}
- 在代码中的任何位置引用
Preferences.SavedList
void AddToList(string text)
{
var savedList = new List<string>(Preferences.SavedList);
savedList.Add(text);
Preferences.SavedList = savedList;
}
【解决方案2】:
在设置插件中,您可以以键值方式存储,因此您不能直接存储列表。一种解决方法是,您可以将列表序列化为 json 字符串,然后可以使用密钥存储它。
当您需要返回列表时,您可以使用密钥获取该 json 字符串并将其反序列化为原始格式。