如何使用没有Json.Net依赖的SQLite-Net Extensions(使用备用ITextBlobSerializer)?

时间:2016-04-21 20:27:18

标签: c# .net sqlite sqlite-net-extensions

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

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

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

是否有人能够提供没有其他依赖关系的ITextBlobSerializer实现?我不知道如何继续前进。

2 个答案:

答案 0 :(得分: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());
    }

答案 1 :(得分:0)

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

  

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

     

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

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