gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:06:12 24 4
gpt4 key购买 nike

简介:在 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); }
}

虽然这很好用,但我觉得这不是最好的方法。

实际问题:我该如何改进。 IE。如何存储 Date 的序列化版本直接地。它应该是 Date可以用作主键。拥有 Date 中的所有属性对我来说并不重要。在表格的单个列中可用。我要存储 Date本身仅在一列中。

当前研究:在尝试谷歌寻找答案时,我偶然发现了 SQLite.net 的 ISerializable。界面,但我不确定如何使用它,因为它只有 serialize方法但没有 deserialize方法。
namespace SQLite.Net
{
public interface ISerializable<T>
{
[PublicAPI]
T Serialize();
}
}

最佳答案

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

  • 因为没有,this SQLite.Net-PCL Issue已提交。它还提到了修复(例如满足接口(interface)的构造函数假设)

  • 解决方案:你的可序列化类需要 导演 接受 可序列化类型作为参数 .

    一个例子:

    带两个整数的类:

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

    关于c# - SQLite.net 中的可序列化数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31043363/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com