I can't comment on msgpack, but yes: protobuf-net can do everything you've mentioned, including:
- serialize non-public types
- serialize private fields
- serialize trees
- constructor-skipping or user-provided factory (or just parameterless constructor)
- serialize full/cyclic graphs (by explicitly marking the affected as references)
- attribute usage, or runtime configuration without changing the DTO at all (although frankly, attributes are usually easier)
- fast and compact output
- inheritance support
In the case of the example given, the simplest "does it work" test would be to just make the types with [ProtoContract] (there's an optional setting in that attribute for constructor-skipping), and mark the fields as [ProtoMember(n)], for example n=1,2,3,... (unique in each type, but does not need to be unique between types)
Other than the fact that we use Redis+BookSleeve rather than memcached+enyim, this is exactly what we do at Stack Exchange for object caching. Well, we also do a speculative gzip for large objects - if there is lots of string data, gzip can help shave off a few extra bytes.