0

我的 Xamarin 应用程序有一些带有 Akavache 的缓存对象。出于测试目的,我试图以原始 JSON 字符串格式获取缓存数据。我尝试了以下方法,但得到了一个奇怪的字符串:

protected readonly IBlobCache cache;
private void ViewCachedData(string key) => this.cache.Get(key).Subscribe(OnDataLoaded);
private void OnDataLoaded(byte[] data) => Debug.WriteLine(Encoding.ASCII.GetString(data));

Debug.WriteLine 只会打印一个问号,但检查值我可以看到部分 JSON:

"?\0\0Value\0?\0\0EmployeeNumber\0\b\0\0\0848\0FirstName\0\0\0\0aaron\0LastName\0\0\0\0jones\0\nPreferredFirstName\0CellPhoneNumber\0\v\0\0\05555555555\0\n\0\0\0"
4

2 回答 2

1

Akavache 不将内容存储在 JSON 中,而是将它们存储在 BSON 中

于 2019-09-20T20:40:33.823 回答
0

我能够通过使用以下代码来解决这个问题:

private void OnDataLoaded(byte[] data)
{
    using (var reader = new BsonReader(new MemoryStream(data)))
    {
        var serializer = JsonSerializer.Create(new JsonSerializerSettings());
        var json = serializer.Deserialize<JObjectWrapper>(reader).Value;
        Debug.WriteLine(json);
    }
}

private class JObjectWrapper
{
    public JObject Value { get; set; }
}
于 2019-09-23T20:19:40.643 回答