[英]Serializable data types in SQLite.net
简介:在SQLite.net驱动的SQLite数据库中(在WP8.1 SL上,但这不应该在这里)我正在添加基于给定对象的数据。 此对象包含名为Date
的自定义类型。 到目前为止,我没有将该属性存储在数据库中,而是使用另一个属性作为解决方法。
[Ignore]
public Date Date { get; set; }
[PrimaryKey]
public DateTime DateInternal
{
get { return Date.ToDateTime(); }
set { Date = new Date(value); }
}
虽然这很好但我觉得这不是最好的方法。
实际问题:我该如何改进。 即如何直接存储序列化版本的Date
。 它应该以某种方式使Date
可以用作主键。 在表中的单个列中将Date
所有属性都可用对我来说并不重要。 我想将Date
本身存储在一列中。
目前的研究:为了尝试Google的答案,我偶然发现了SQLite.net的ISerializable
接口,但我不确定如何使用它,因为它只有serialize
方法但没有deserialize
方法。
namespace SQLite.Net
{
public interface ISerializable<T>
{
[PublicAPI]
T Serialize();
}
}
已知问题:在ISerializable类中至少应该有一条注释,说明任何使用要求。
解决方案:您的可序列化类需要ctor ,它将可序列化类型作为参数 。
一个例子:
班级有两个整数:
public struct MySerializable : ISerializable<string>
{
public int Value1 { get; set; }
public int Value2 { get; set; }
// ****See Here: Ctor taking serialized type to restore field vals
public MySerializable(string serializedData) : this()
{
var stringVals = serializedData.Split(',');
Value1 = Convert.ToInt32(stringVals[0]);
Value2 = Convert.ToInt32(stringVals[1]);
}
public override string ToString()
{
return string.Format("{0},{1}", Value1, Value2);
}
// ****See Here: serializing field vals to string
public string Serialize()
{
return ToString();
}
}
在SQLite持久化类中使用:
public class MyTable
{
[PrimaryKey, AutoIncrement]
public int Id { get; private set; }
public MySerializable MySerValues { get; private set; }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.