2016-04-21 53 views
1

我在寫一個使用SQLite-Net Extensions的插件(.Net Framework 4.61)。這些要求Newtonsoft的Json.NET出現在ITextBlobSerializer中。 Json.NET反過來要求System.Numerics作爲參考。如何使用不帶Json.Net依賴項的SQLite-Net擴展(使用替代ITextBlobSerializer)?

該插件不能使用任何Nuget包,必須作爲壓縮源提交,然後在應用程序提供者的服務器上進行編譯。目前的挑戰是應用程序編譯器不支持System.Numerics和System.Numerics也不是可嵌入的互操作類型。我添加System.Numerics的要求已被忽略。

由於我沒有使用System.Numerics的方法,我最好的辦法可能是擺脫Json.Net並用我自己的實現來替換ITextBlobSerializer。

是否有人能夠提供沒有其他依賴關係的ITextBlobSerializer實現?我不知道如何繼續前進。

回答

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

最後我在TextBlobOperations.cs編輯GetTextSerializer方法是這樣的,所以我自己ITextBlobSerializer成爲默認:

public static ITextBlobSerializer GetTextSerializer() 
    { 
     // If not specified, use the Javascript serializer 
     return _serializer ?? (_serializer = new BlobSerializer()); 
    } 
0

你可以使用TextBlobOperations.SetTextSerializer方法設置新的串行器。

用於存儲和加載元件串行器可以通過實現簡單ITextBlobSerializer接口定製 。

如果沒有其他序列化程序使用TextBlobOperations.SetTextSerializer方法指定 ,則使用基於JSON的序列化程序。要使用JSON序列化程序 ,對Newtonsoft Json.Net庫的引用必須包含在項目中,也可作爲NuGet程序包使用。

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

相關問題