3

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

有没有一种简单的方法可以将我的列表包装在NSObject我可以存储在我的设置中,或者是一种快速的通用方法来编码和解码Hashtable一个 JSON 字符串(或类似的)?

还是有一个 MonoTouch 替代方案来保留一小部分Hashtables?

4

2 回答 2

3

为什么不将数据保存到 SQLite 表中?

您可以使用字段创建安静的简单表:

  • id - auto inc int - 主键;
  • 列表名称 - 字符串 - 识别确切的列表;
  • 列表数据 - byte[] - 列表的数据。

对于 List -> byte[](反之亦然)转换尝试使用这样的代码:

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;
    }
}
于 2013-01-14T16:30:02.570 回答
3

就像@Maxim 所说,有几种方法可用。如果您想用来NSUserDefaults存储您的数据,那么您可以将其序列化(使用 MonoTouch 提供给您的 .NET 功能),以:

  • 二进制格式。然后使用Stream(or byte[]) 创建一个NSData您可以使用NSUserDefaults;存储的实例。或者

  • 放入一个字符串并将其存储为a NSStringstring也可以使用重载,但它会进行NSString转换);

于 2013-01-14T22:08:54.047 回答