繁体   English   中英

如何在不依赖 Json.Net 的情况下使用 SQLite-Net 扩展(使用替代 ITextBlobSerializer)?

[英]How to use SQLite-Net Extensions without Json.Net dependency (with alternative ITextBlobSerializer)?

我正在编写一个使用 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 实现? 我不知道如何在这方面进行。

事实证明,这并不难。 我删除了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());
    }

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM