public object Deserialize([NotNull] Stream stream) { var session = new DeserializerSession(this); var s = GetDeserializerByManifest(stream, session); return(s.ReadValue(stream, session)); }
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"); } }
public T Deserialize <T>([NotNull] Stream stream, DeserializerSession session) { var s = GetDeserializerByManifest(stream, session); return((T)s.ReadValue(stream, session)); }