如何在NSUserDefault中存储c#列表

如何在NSUserDefault中存储c#列表,c#,ios,xamarin.ios,nsuserdefaults,C#,Ios,Xamarin.ios,Nsuserdefaults,我试图在NSUserDefaults中为每个元素存储一个包含日期时间值和字符串值的列表 var reminderList = new List<doubleVariableDateAndName>(); NSDate dateNS = dateSet.Date; DateTime dateDT = ((DateTime)dateSet.Date).ToLocalTime(); reminderList.Add(new doubleVa

我试图在NSUserDefaults中为每个元素存储一个包含日期时间值和字符串值的列表

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

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


我还没有找到一种将对象存储在NSUserDefaults中的方法。无论我如何序列化和反序列化我的对象,您都可以对列表执行同样的操作

所以我有一个帐户对象。我将其序列化为字符串,然后存储在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;
}
公共帐户GetAccount()
{
var userDefaults=NSUserDefaults.StandardUserDefaults;
var stringAccount=userDefaults.StringForKey(AccountIdentifier);
如果(!string.IsNullOrEmpty(stringAccount))
{
var account=JsonConvert.DeserializeObject(stringAccount);
返回帐户;
}
返回null;
}
我使用Newtonsoft.Json来处理序列化和反序列化。如果你还没有使用它,你可以仔细阅读

因此,要使列表序列化,您可以执行以下操作

public void SaveList(List<doubleVariableDateAndName> reminderList)
{
    var serializedContent = JsonConvert.SerializeObject(reminderList);
    NSUserDefaults.StandardUserDefaults.SetString(serializedContent ,"yourUniqueIdentifier");
}
public void存储列表(列表提醒列表)
{
var serializedContent=JsonConvert.SerializeObject(提醒列表);
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;
}
public List get提醒列表()
{
var userDefaults=NSUserDefaults.StandardUserDefaults;
var serializedContent=userDefaults.StringForKey(“您的唯一标识符”);
如果(!string.IsNullOrEmpty(serializedContent))
{
var rementerList=JsonConvert.DeserializeObject(serializedContent);
返回提醒列表;
}
返回null;
}

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

是否要将
提醒列表
存储在UserDefaults中您可以在存储列表之前对其进行序列化。那么您将把它存储为一个字符串。然后,当您转到并从用户默认值中提取它时,将其反序列化;出现一个错误,说明程序集中未定义类型“Object”。@ByronBanzhaf如果您已将newtonsoft.json nuget程序包添加到项目中,它应该可以立即运行。如果您编辑您的问题并将堆栈跟踪添加到底部,我将尝试帮助您对其进行排序。此外,doubleVariableDateAndName对象的类定义也会有所帮助。这是一个构建错误还是一个运行时错误?很抱歉,如果我看起来有点笨,但是调用堆栈中似乎没有任何东西。我已经用我调用的类更新了帖子,并检查了newtonsoft.json是否被引用。@ByronBanzhaf一点也不,我们都需要从某个地方开始。好吧,让我们想想你用xamarin编写的IOS应用程序。因此,您有一个IOS应用程序项目的解决方案。您是否有包含共享代码的项目?例如,对于xamarin,您通常会有一个包含共享逻辑的核心项目,类似于此处显示的图表,您的解决方案结构可能要求在您看到的每个项目中引用您的包好的,如果是这种情况,您可能只需要添加对此的引用,因此请检查您是否已经有引用,如果没有,请尝试将其添加为nuget包,看看是否有帮助。听起来newtonsoft的最新版本可能需要引用此软件包
var reminderList = new List<doubleVariableDateAndName>();
        NSDate dateNS = dateSet.Date;
        DateTime dateDT = ((DateTime)dateSet.Date).ToLocalTime();

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