private static T Read(Reader reader, string key)
        {
            Stream stream = reader.Stream;
            T      obj    = Factory <T> .New();

            reader.AddReference(obj);
            MembersReader.ReadAllMembers(reader, key, ref obj);
            stream.ReadByte();
            return(obj);
        }
        private static T Read(Reader reader, string key)
        {
            Stream stream = reader.Stream;
            T      obj    = Factory <T> .New();

            reader.AddReference(null);
            int refIndex = reader.LastReferenceIndex;

            MembersReader.ReadAllMembers(reader, key, ref obj);
            reader.SetReference(refIndex, obj);
            stream.ReadByte();
            return(obj);
        }
        private static T ReadMapAsObject(Reader reader)
        {
            Stream stream = reader.Stream;
            T      obj    = Factory <T> .New();

            reader.AddReference(obj);
            int count           = ValueReader.ReadCount(stream);
            var strDeserializer = Deserializer <string> .Instance;

            for (int i = 0; i < count; ++i)
            {
                var name = strDeserializer.Deserialize(reader);
                MembersReader.ReadMember(reader, name, ref obj);
            }
            stream.ReadByte();
            return(obj);
        }