我正在维护一个使用protobuf-net 2.3.3在redis服务器2.8.2103上使用StackExchange.Redis 1.2.6的应用程序。
对于这样的对象:
[ProtoContract(ImplicitFields = ImplicitFields.AllFields)]
public class Cachable { Foo[] Foos { get; set; } }
当我使用简单的以下方式保存时:
using (var memoryStream = new MemoryStream())
{
Serializer.Serialize(memoryStream, cachable);
database.HashSetAsync("category", "key", memoryStream.ToArray());
}
然后使用以下代码进行检索:
var response = database.HashGet("category", "key");
if (!response.HasValue) return null;
using (var memoryStream = new MemoryStream(response, false))
{
return Serializer.Deserialize<Cachable>(memoryStream);
}
如果缓存数组Foos有一个空的实例,比如new Foo[0],一旦Cachable被反序列化,该数组将变为null。 这会改变应用程序的某些部分的行为并生成错误。 这种行为是否是预期的?是否有任何方法可以更改它?