Exemplo n.º 1
0
        public object Deserialize([NotNull] Stream stream)
        {
            var session = new DeserializerSession(this);
            var s       = GetDeserializerByManifest(stream, session);

            return(s.ReadValue(stream, session));
        }
Exemplo n.º 2
0
        public ValueSerializer GetDeserializerByManifest([NotNull] Stream stream, [NotNull] DeserializerSession session)
        {
            var first = stream.ReadByte();

            if (first <= 250)
            {
                return(_deserializerLookup[first]);
            }
            switch (first)
            {
            case ConsistentArraySerializer.Manifest:
                return(ConsistentArraySerializer.Instance);

            case ObjectReferenceSerializer.Manifest:
                return(ObjectReferenceSerializer.Instance);

            case ObjectSerializer.ManifestFull:
            {
                var type = TypeEx.GetTypeFromManifestFull(stream, session);
                return(GetCustomDeserializer(type));
            }

            case ObjectSerializer.ManifestVersion:
            {
                var type = TypeEx.GetTypeFromManifestVersion(stream, session);
                return(GetCustomDeserializer(type));
            }

            case ObjectSerializer.ManifestIndex:
            {
                var typeId = (int)stream.ReadUInt16(session);
                if (typeId < _knownValueSerializers.Length)
                {
                    return(_knownValueSerializers[typeId]);
                }
                var type = TypeEx.GetTypeFromManifestIndex(typeId, session);
                return(GetCustomDeserializer(type));
            }

            default:
                throw new NotSupportedException("Unknown manifest value");
            }
        }
Exemplo n.º 3
0
        public T Deserialize <T>([NotNull] Stream stream, DeserializerSession session)
        {
            var s = GetDeserializerByManifest(stream, session);

            return((T)s.ReadValue(stream, session));
        }