SQLite.net中的可序列化数据类型

时间:2015-06-25 07:00:51

标签: c# sqlite serialization 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();
    }
}

1 个答案:

答案 0 :(得分:1)

已知问题: 至少 应该是ISerializable类中的注释,说明任何使用要求。< / p>

解决方案:您的可序列化类需要 ctor ,它将 可序列化类型作为参数

示例:

班级有两个整数:

<ns:getPartnerResponse xmlns:ns="http://mis.com" xmlns:ax21="http://bean/xsd">
<ns:return type="bean.PartnerBean">
    <ax21:idPosPar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" />
    <ax21:kolicina>70.0</ax21:kolicina>
    <ax21:nazPar>SOMEDATA</ax21:nazPar>
    <ax21:sifPar>1000001</ax21:sifPar>
</ns:return>

在SQLite持久化类中使用:

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();
    }
}