public void CanReadComplexObject( )
        {
            var complex = new ComplexObject {
                Name = "Name", Version = new Version("1.2.3.4"), TypeCode = TypeCode.DBNull
            };

            using var output = new MemoryStream( );
            using var writer = new IO.BinaryWriterWith7BitEncoding(output);

            BinaryFormatWriter.Write(writer, typeof(ComplexObject), complex);

            using var input  = new MemoryStream(output.ToArray( ));
            using var reader = new IO.BinaryReaderWith7BitEncoding(input);

            var deserializedComplex = BinaryFormatReader.Read <ComplexObject> (reader);

            Assert.NotNull(deserializedComplex);
            if (deserializedComplex == null)
            {
                return;
            }

            Assert.Equal(complex.Name, deserializedComplex.Name);
            Assert.Equal(complex.Version, deserializedComplex.Version);
            Assert.Equal(complex.TypeCode, deserializedComplex.TypeCode);
            Assert.Null(deserializedComplex.Parent);
        }
        public void CanReadObjectUsingConverter( )
        {
            var surrogate = new BinaryFormatSurrogate( );

            surrogate.AddConverter(ReadComplexObjectNameOnly, WriteComplexObjectNameOnly);

            var complex = new ComplexObject {
                Name = "Name", Version = new Version("1.2.3.4"), TypeCode = TypeCode.DBNull
            };

            using var output = new MemoryStream( );
            using var writer = new IO.BinaryWriterWith7BitEncoding(output);

            BinaryFormatWriter.Write(writer, typeof(ComplexObject), complex, surrogate);

            using var input  = new MemoryStream(output.ToArray( ));
            using var reader = new IO.BinaryReaderWith7BitEncoding(input);

            var deserializedComplex = BinaryFormatReader.Read <ComplexObject> (reader, surrogate);

            Assert.NotNull(deserializedComplex);
            if (deserializedComplex == null)
            {
                return;
            }

            Assert.Equal(complex.Name, deserializedComplex.Name);
            Assert.Equal(default, deserializedComplex.Version);
 public StreamBinaryReader(Stream stream, IBinaryReaderSurrogate?surrogate = default)
 {
     BinaryReader = new IO.BinaryReaderWith7BitEncoding(stream, new UTF8Encoding(false, true), true);
     Surrogate    = surrogate;
 }