我正在编写一个使用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实现?我不知道如何继续前进。
答案 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包提供。