示例#1
0
        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);
 }