首页 > 解决方案 > 如何在 NSUserDefaults 中存储 c# 列表

问题描述

我正在尝试为 NSUserDefaults 中的每个元素存储一个包含 DateTime 值和 String 值的列表。

var reminderList = new List<doubleVariableDateAndName>();
        NSDate dateNS = dateSet.Date;
        DateTime dateDT = ((DateTime)dateSet.Date).ToLocalTime();

        reminderList.Add(new doubleVariableDateAndName() { Name = nameSet.Text, DueDay = dateDT});

如果它有帮助,您可以忽略代码的第 2 行和第 3 行以及我想存储在 NSUserDefaults 中的提醒列表中的列表。

public NSUserDefaults dataBase = NSUserDefaults.StandardUserDefaults;

    public class doubleVariableDateAndName
    {
        public string Name;
        public DateTime DueDay;
    }

在此处输入图像描述

在此处输入图像描述

标签: c#iosxamarin.iosnsuserdefaults

解决方案


我还没有遇到在 NSUserDefaults 中存储对象的方法。但是我序列化和反序列化我的对象,你可以对你的列表做同样的事情。

所以我有一个 Account 对象。我将其序列化为字符串,然后存储在 NSUserDefaults 中,如下所示

public void SaveAccount(Account account)
{
    var stringAccount = JsonConvert.SerializeObject(account);
    NSUserDefaults.StandardUserDefaults.SetString(stringAccount,AccountIdentifier);
}

然后为了取回对象,我反序列化它并返回它。

public Account GetAccount()
{
   var userDefaults = NSUserDefaults.StandardUserDefaults;
   var stringAccount = userDefaults.StringForKey(AccountIdentifier);
   if (!string.IsNullOrEmpty(stringAccount))
   {
      var account = JsonConvert.DeserializeObject<Models.Account>(stringAccount);
      return account;
   }

   return null;
}

我使用 Newtonsoft.Json 来处理序列化和反序列化。如果你还没有使用它,你可以在这里阅读它。

因此,为了使您的列表序列化,您可以执行类似的操作

public void SaveList(List<doubleVariableDateAndName> reminderList)
{
    var serializedContent = JsonConvert.SerializeObject(reminderList);
    NSUserDefaults.StandardUserDefaults.SetString(serializedContent ,"yourUniqueIdentifier");
}

然后从商店取回您的清单,您可以使用

public List<doubleVariableDateAndName> GetReminderList()
{
   var userDefaults = NSUserDefaults.StandardUserDefaults;
   var serializedContent = userDefaults.StringForKey("yourUniqueIdentifier");
   if (!string.IsNullOrEmpty(serializedContent ))
   {
      var reminderList = JsonConvert.DeserializeObject<List<doubleVariableDateAndName>>(serializedContent);
      return reminderList;
   }

   return null;
}

将函数重新格式化为最适合您的格式,但这将允许您将列表存储在 NSUserDefaults 中。


推荐阅读