C# 从Akavache获取JSON字符串
我的Xamarin应用程序有一些带有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
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;}
}