c# – SQLite.net中的可序列化数据类型
发布时间:2020-12-15 22:16:24 所属栏目:百科 来源:网络整理
导读:简介:在SQLite.net驱动的SQLite数据库中(在WP8.1 SL上,但这不应该在这里)我正在添加基于给定对象的数据.此对象包含名为Date的自定义类型.到目前为止,我没有将该属性存储在数据库中,而是使用另一个属性作为解决方法. [Ignore]public Date Date { get; set; }
简介:在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接口,但我不确定如何使用它,因为它只有序列化方法但没有反序列化方法. namespace SQLite.Net { public interface ISerializable<T> { [PublicAPI] T Serialize(); } } 解决方法
已知问题:在ISerializable类中至少应该有一条注释,说明任何使用要求.
>因为没有,所以提交了this SQLite.Net-PCL Issue.它还提到了修复(例如,满足接口的构造函数假设) 解决方案:您的可序列化类需要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; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |