Пытается ввести кэширование/состояние, сохраняющееся в среднем уровне приложения со сложным слоем объекта (и уровнем обслуживания WCF, а не фокусом здесь), работающим под IIS. Устроились на memcached/enyim в качестве архитектуры кэширования, и теперь вам нужно получить эти объекты, чтобы они эффективно сериализовались (скорость и пространство).Каков самый простой способ сериализации сложного слоя объекта в .NET для кэширования?
слоя объекта имеет много указателей и взаимозависимостей между объектами, вдоль этих линий:
internal class SomeObj
{
private string attr1;
private int attr2;
private OtherObj otherObj;
private List<OtherOtherObj> otherObjs;
}
internal class OtherObj
{
//...more attributes
}
internal class OtherOtherObj
{
// you get the idea
}
Обратите внимание, что все поля являются частными. Также стоит отметить, что большинство объектов являются внутренними, и многие свойства либо доступны только для чтения (без набора), либо используют набор с точки зрения пользователя (т. Е. Делают объект «грязным»), поэтому его нельзя использовать при регидратации. У меня есть десятки типов, которые требуют кэширования.
Мне нравится внешний вид как protobuf-net, так и msgpack, но мне нужно как можно быстрее выполнить сериализацию с минимальным изменением существующей архитектуры (которая работает хорошо, как есть), и это кажется так как оба они имеют ограниченную поддержку иерархии объектов. Я хорошо понимаю сериализацию типа DTO, но новичок в планировании правильного способа сериализации объекта для кеша. Может ли один из этих инструментов работать на меня? Я застрял с помощью встроенного .NET-бинарного файла, чтобы работать с конструктором, а также переписывать атрибуты и объекты на своих собственных условиях?
EDIT: просто уточнить, что последний вопрос - может иметь больше смысла, если читать «Могу ли я застрял с помощью встроенного в .NET бинарного , так что я могу контролировать конструктор, и заселить атрибуты и объекты на моей термины
спасибо, я сделал довольно много чтения о Redis тоже, не выглядел, как Windows-сервис, просто для меня. Я также рассмотрел несколько простых примеров (r) protobuf-net, и мне показалось, что это очень похоже на WCF, что мне нравится, но только как объект DTO/POCO «строитель», который кажется другим.Просто чтобы убедиться, что я понимаю: лучше всего использовать protobuf-net в таком случае, чтобы сериализовать поля, а не свойства? И тогда это так же просто, как обертывание вызовов для добавления/получения в/из кеша в методах сериализации/десериализации? – downwitch
@ downwitch будет работать пять с любыми полями или свойствами. Обычно я работаю с реквизитом, но вы упомянули о том, что не хотите этого делать из-за «грязных» чеков и т. Д. Но: да, так просто, как –
@ downwitch protobuf-net может использоваться с WCF, но это всего лишь один сценарий - большую часть времени я бы ожидал, что он будет использоваться в изоляции –