在Monotouch中,是否可以将通用列表保存到NSUserDefaults?

我在我的MonoTouch应用程序中有一个List<Hashtable> ,我需要将其保存到我的设置。 NSUserDefaults ,但是,只接受从NSObjectinheritance的东西。

有没有一种简单的方法来包装我的List中,我可以存储在我的设置,或者是一个快速通用的方式来编码和解码一个JSONstring(或类似)的Hashtable

还是有一个MonoTouch的替代品,坚持一个小的Hashtable

就像@Maxim所说有几种方法可用。 如果你想使用NSUserDefaults来存储你的数据,那么你可以使用MonoTouch对它进行序列化(你可以使用一个.NETfunction)来:

  • 一个二进制格式 。 然后使用Stream (或byte[] )创build一个NSData实例,您可以使用NSUserDefaults存储; 要么

  • 到一个string ,并将其存储为一个NSStringstring重载也可用,但它将做NSString转换);

为什么不把你的数据保存到SQLite表?

你可以创build一个安静简单的表格与领域:

  • id – auto inc int – 主键;
  • 列表名称 – string – 标识确切的列表;
  • 列表数据 – 字节[] – 列表的数据。

对于列表 – >字节[](反之亦然)转换尝试使用这样的代码:

 public static class Bytes { /// <summary> /// Function to get byte array from a object /// </summary> /// <param name="_Object">object to get byte array</param> /// <returns>Byte Array</returns> public static byte[] ObjectToByteArray (object obj) { try { var _MemoryStream = new MemoryStream (); var _BinaryFormatter = new BinaryFormatter (); _BinaryFormatter.Serialize (_MemoryStream, obj); return _MemoryStream.ToArray (); } catch (Exception _Exception) { Console.WriteLine ("Exception caught in process: {0}", _Exception.ToString ()); } return null; } public static T ByteArrayToObject<T> (byte[] arrBytes) { var memStream = new MemoryStream (); var binForm = new BinaryFormatter (); memStream.Write (arrBytes, 0, arrBytes.Length); memStream.Seek (0, SeekOrigin.Begin); var result = default(T); try { result = (T)binForm.Deserialize (memStream); } catch (Exception ex) { Console.WriteLine ("Deserialize error {0}", ex); } return result; } }