public static void SetupBondJson(
            out Action <object, ChunkedMemoryStream> serialize,
            out Func <ChunkedMemoryStream, Type, object> deserialize)
        {
            var serializers   = new Dictionary <Type, Bond.Serializer <SimpleJsonWriter> >();
            var deserializers = new Dictionary <Type, Bond.Deserializer <SimpleJsonReader> >();

            serialize = (obj, stream) =>
            {
                var jsonWriter = new SimpleJsonWriter(stream);
                var type       = obj.GetType();
                Bond.Serializer <SimpleJsonWriter> serializer;
                if (!serializers.TryGetValue(type, out serializer))
                {
                    serializers[type] = serializer = new Bond.Serializer <SimpleJsonWriter>(type);
                }
                serializer.Serialize(obj, jsonWriter);
                jsonWriter.Flush();
            };
            deserialize = (stream, type) =>
            {
                var reader = new SimpleJsonReader(stream);
                Bond.Deserializer <SimpleJsonReader> deserializer;
                if (!deserializers.TryGetValue(type, out deserializer))
                {
                    deserializers[type] = deserializer = new Bond.Deserializer <SimpleJsonReader>(type);
                }
                return(deserializer.Deserialize(reader));
            };
        }
        public static void SetupBondBinary(
            out Action <object, ChunkedMemoryStream> serialize,
            out Func <ChunkedMemoryStream, Type, object> deserialize)
        {
            var serializers   = new Dictionary <Type, Bond.Serializer <FastBinaryWriter <OutputStream> > >();
            var deserializers = new Dictionary <Type, Bond.Deserializer <FastBinaryReader <InputStream> > >();

            serialize = (obj, stream) =>
            {
                var output = new OutputStream(stream, 512);
                var writer = new FastBinaryWriter <OutputStream>(output);
                Bond.Serializer <FastBinaryWriter <OutputStream> > serializer;
                var type = obj.GetType();
                if (!serializers.TryGetValue(type, out serializer))
                {
                    serializers[type] = serializer = new Bond.Serializer <FastBinaryWriter <OutputStream> >(type);
                }
                serializer.Serialize(obj, writer);
                output.Flush();
            };
            deserialize = (stream, type) =>
            {
                var input  = new InputStream(stream, 512);
                var reader = new FastBinaryReader <InputStream>(input);
                Bond.Deserializer <FastBinaryReader <InputStream> > deserializer;
                if (!deserializers.TryGetValue(type, out deserializer))
                {
                    deserializers[type] = deserializer = new Bond.Deserializer <FastBinaryReader <InputStream> >(type);
                }
                return(deserializer.Deserialize(reader));
            };
        }