Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从Akavache获取JSON字符串_C#_Xamarin_Akavache - Fatal编程技术网

C# 从Akavache获取JSON字符串

C# 从Akavache获取JSON字符串,c#,xamarin,akavache,C#,Xamarin,Akavache,我的Xamarin应用程序有一些带有Akavache的缓存对象。 出于测试目的,我尝试以原始JSON字符串格式获取缓存数据。我尝试了以下方法,但得到了一个奇怪的字符串: protected readonly IBlobCache cache; private void ViewCachedData(string key) => this.cache.Get(key).Subscribe(OnDataLoaded); private void OnDataLoaded(byte[] data

我的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"

Akavache不使用JSON存储东西,而是将它们存储在BSON中。我可以通过使用以下代码来解决这个问题:

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; }
}
private void OnDataLoaded(字节[]数据)
{
使用(var reader=new BsonReader(new MemoryStream(data)))
{
var serializer=JsonSerializer.Create(新的JsonSerializerSettings());
var json=serializer.Deserialize(reader.Value);
WriteLine(json);
}
}
私有类JObjectWrapper
{
公共作业对象值{get;set;}
}