private T Deserialize <T>(SerializationHandler <T> handler, BufferReader br, Envelope env, bool isDynamic, bool isRaw, T objectToReuse, string typeName, IDictionary <string, TypeSchema> schemas) { if (isDynamic) { var deserializer = new DynamicMessageDeserializer(typeName, schemas); objectToReuse = deserializer.Deserialize(br); } else if (isRaw) { objectToReuse = (T)(object)Message.Create(br, env); } else { int currentPosition = br.Position; try { handler.Deserialize(br, ref objectToReuse, this.context); } catch { this.PsiStoreReader.EnsureMetadataUpdate(); br.Seek(currentPosition); handler.Deserialize(br, ref objectToReuse, this.context); } } this.context.Reset(); return(objectToReuse); }
/// <summary> /// Initializes a new instance of the <see cref="DynamicDeserializerComponent"/> class. /// </summary> /// <param name="pipeline">The pipeline to which to attach.</param> /// <param name="typeName">Type name.</param> /// <param name="schemas">Known type schemas.</param> public DynamicDeserializerComponent(Pipeline pipeline, string typeName, IDictionary <string, TypeSchema> schemas) : base(pipeline) { this.deserializer = new DynamicMessageDeserializer(typeName, schemas); }