簡體   English   中英

SQLite.net中的可序列化數據類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM