The current ITypeSerializer implementation works under the assumption that
all serialization/deserialization requests should have the same behavior.
Any client library which implements a custom ITypeSerializer overrides
this behavior for all requests to Couchbase.
However, there are instances where a specific request may require custom
options. The particular example addressed here is change tracking in the
Linq2Couchbase library. It needs to control the object creation process
for some deserialization requests in order to create change tracking
Additionally, we need a method for custom ITypeSerializer implementations
to provide member name resolution information to consumers. This will
allow Linq2Couchbase to determine the correct attribute names to use when
building N1QL queries. Currently, it is forced to assume that the
Newtonsoft.Json behavior is in use.
Finally, there is currently no method to override the deserialization
process for N1QL queries on a per-request basis.