1

我正在编写一个使用 SQLite-Net 扩展的插件(.Net Framework 4.61)。这些要求为 ITextBlobSerializer 提供 Newtonsoft 的 Json.NET。Json.NET 反过来需要 System.Numerics 作为参考。

该插件不能使用任何 Nuget 包,必须作为压缩源提交,然后在应用程序提供商的服务器上编译。手头的挑战是应用程序编译器不支持 System.Numerics 并且 System.Numerics 也不是可嵌入的互操作类型。我要求添加 System.Numerics 的请求已被忽略。

由于我无法使用 System.Numerics,我最好的方法可能是摆脱 Json.Net 并用我自己的实现替换 ITextBlobSerializer。

是否有人能够提供没有其他依赖项的 ITextBlobSerializer 实现?我不确定如何在这方面进行。

4

2 回答 2

1

事实证明这并不难。我删除了JsonBlobSerializer.cs取决于 Json.Net 的唯一文件。然后,我创建了自己的 ITextBlobSerializer 实现,该实现利用了 Javascript 序列化程序,如下所示:

using System;
using System.Web.Script.Serialization;
using SQLite.Extensions.TextBlob;

public class BlobSerializer : ITextBlobSerializer
{
    private readonly JavaScriptSerializer serializer = new JavaScriptSerializer();

    public string Serialize(object element)
    {
        var str = serializer.Serialize(element);
        return str;

    }

    public object Deserialize(string text, Type type)
    {
        var result = serializer.Deserialize(text, type);
        return result;
    }
}

最后,我将GetTextSerializer方法编辑TextBlobOperations.cs为如下所示,因此我自己的 ITextBlobSerializer 成为默认值:

    public static ITextBlobSerializer GetTextSerializer()
    {
        // If not specified, use the Javascript serializer
        return _serializer ?? (_serializer = new BlobSerializer());
    }
于 2016-04-22T09:50:25.303 回答
0

您可以使用TextBlobOperations.SetTextSerializer方法来设置新的序列化程序。

可以通过实现简单的 ITextBlobSerializer 接口来自定义用于存储和加载元素的序列化程序。

如果没有使用 TextBlobOperations.SetTextSerializer 方法指定其他序列化程序,则使用基于 JSON 的序列化程序。要使用 JSON 序列化程序,项目中必须包含对 Newtonsoft Json.Net 库的引用,也可以作为 NuGet 包提供。

https://bitbucket.org/twincoders/sqlite-net-extensions

于 2016-11-22T09:56:45.597 回答