在首选项中保存对象列表(.NET MAUI)

rqqzpn5f  于 11个月前  发布在  .NET
关注(0)|答案(1)|浏览(88)
public class Audioguia
{
    public int id { get; set; }
    public string name{ get; set; }
    public string direction{ get; set; }
    public string image { get; set; }

}

字符串
你好,我的老板已经责成我添加一个选项,以保存列表的'audioguides'(上面的上下文对象)作为“我的audioguides”在audioguide应用程序。用户应该能够在他们方便的时候访问这个列表。这里的挑战是,他想避免使用数据库,并询问这是否可以在本地完成。我认为这可能是通过利用“偏好”来实现的。然而,我遇到了一些困难,特别是在序列化数据时。我甚至不确定是否可以用这种方式保存对象列表。有人知道如何实现这一点吗?或者你能证实这是否确实可行吗?这是我迄今为止尝试的,但还没有成功:

public class AudioguiaService
{
    private const string KeyAudioguias = "Audioguias";

    public List<Audioguia> GetAudioguias()
    {
        if (Preferences.ContainsKey(KeyAudioguias))
        {
            string audioguiaJson = Preferences.Get(KeyAudioguias, string.Empty);
            if (!string.IsNullOrEmpty(audioguiaJson))
            {
                return JsonConvert.DeserializeObject<List<Audioguia>>(audioguiaJson);
            }
        }
        return new List<Audioguia>();
    }

    public void AddAudioguia(Audioguia audioguia)
    {
        List<Audioguia> audioguias = GetAudioguias();
        audioguias.Add(audioguia);

        string audioguiaJson = JsonConvert.SerializeObject(audioguias);
        Preferences.Set(KeyAudioguias, audioguiaJson);
    }
}

6yjfywim

6yjfywim1#

你可以这样写:

private const string KeyAudioguias = "Audioguias";
private const string KeyAudioguiasCount = "AudioguiasCount";

字符串
并将每个Audiogia添加到设置中的单独条目:

public void AddAudioguia(Audioguia audioguia)
{
    int audiogiasCount = Preferences.Get(KeyAudioguiasCount, 0);

    string audioguiaJson = JsonConvert.SerializeObject(audioguia);
    Preferences.Set(KeyAudioguias + audiogiasCount, audioguiaJson);

    audiogiasCount++;
    Preferences.Set(KeyAudioguiasCount, audiogiasCount);                
}


分别阅读每个音频,并将其添加到列表中:

public List<Audioguia> GetAudioguias()
{
        List<Audioguia> result = new List<Audioguia>();
        int audiogiasCount = Preferences.Get(KeyAudioguiasCount, 0);

        for(int i = 0; i < audiogiasCount; i++)
        {            
            if (Preferences.ContainsKey(KeyAudioguias + i))
            {
                string audioguiaJson = Preferences.Get(KeyAudioguias + i, string.Empty);
                result.Add(JsonConvert.DeserializeObject<Audioguia>(audioguiaJson));
            }
        }        
        return result;
}


这样你就不会因为长度而出错。(或者你可以批量序列化它们)
或者你可以忽略你的老板,做程序员做的事情,把它们放在数据库中。

相关问题