Я поддерживаю приложение, используя 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
. Это изменяет поведение некоторой части приложения и вызывает ошибки.
Ожидается ли такое поведение? Есть ли способ изменить это?