List<Hashtable>
我的MonoTouch 应用程序中 有一个,我需要将它保存到我的设置中。NSUserDefaults
但是,只接受从 继承的东西NSObject
。
有没有一种简单的方法可以将我的列表包装在NSObject
我可以存储在我的设置中,或者是一种快速的通用方法来编码和解码Hashtable
一个 JSON 字符串(或类似的)?
还是有一个 MonoTouch 替代方案来保留一小部分Hashtable
s?
List<Hashtable>
我的MonoTouch 应用程序中 有一个,我需要将它保存到我的设置中。NSUserDefaults
但是,只接受从 继承的东西NSObject
。
有没有一种简单的方法可以将我的列表包装在NSObject
我可以存储在我的设置中,或者是一种快速的通用方法来编码和解码Hashtable
一个 JSON 字符串(或类似的)?
还是有一个 MonoTouch 替代方案来保留一小部分Hashtable
s?
为什么不将数据保存到 SQLite 表中?
您可以使用字段创建安静的简单表:
对于 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;
}
}
就像@Maxim 所说,有几种方法可用。如果您想用来NSUserDefaults
存储您的数据,那么您可以将其序列化(使用 MonoTouch 提供给您的 .NET 功能),以:
二进制格式。然后使用Stream
(or byte[]
) 创建一个NSData
您可以使用NSUserDefaults
;存储的实例。或者
放入一个字符串并将其存储为a NSString
(string
也可以使用重载,但它会进行NSString
转换);