コード例 #1
0
 public DeserializeItemsIterator(TypeModel model, Stream source, Type type, PrefixStyle style, int expectedField, ProtobufSerializer.TypeResolver resolver, SerializationContext context)
 {
     this.source        = source;
     this.type          = type;
     this.style         = style;
     this.expectedField = expectedField;
     this.resolver      = resolver;
     this.model         = model;
     this.context       = context;
 }
コード例 #2
0
 public static bool TryDeserializeWithLengthPrefix(Stream source, PrefixStyle style, ProtobufSerializer.TypeResolver resolver, out object value)
 {
     value = RuntimeTypeModel.Default.DeserializeWithLengthPrefix(source, null, null, style, 0, resolver);
     return(value != null);
 }
コード例 #3
0
        private object DeserializeWithLengthPrefix(Stream source, object value, Type type, PrefixStyle style, int expectedField, ProtobufSerializer.TypeResolver resolver, out int bytesRead, out bool haveObject, SerializationContext context)
        {
            bool flag;
            int  num;

            haveObject = false;
            bytesRead  = 0;
            if ((type == null) && ((style != PrefixStyle.Base128) || (resolver == null)))
            {
                throw new InvalidOperationException("A type must be provided unless base-128 prefixing is being used in combination with a resolver");
            }
            do
            {
                int  num2;
                int  num3;
                bool expectHeader = (expectedField > 0) || (resolver != null);
                num = ProtoReader.ReadLengthPrefix(source, expectHeader, style, out num3, out num2);
                if (num2 == 0)
                {
                    return(value);
                }
                bytesRead += num2;
                if (num < 0)
                {
                    return(value);
                }
                if (style == PrefixStyle.Base128)
                {
                    if ((expectHeader && (expectedField == 0)) && ((type == null) && (resolver != null)))
                    {
                        type = resolver(num3);
                        flag = type == null;
                    }
                    else
                    {
                        flag = expectedField != num3;
                    }
                }
                else
                {
                    flag = false;
                }
                if (flag)
                {
                    if (num == 0x7fffffff)
                    {
                        throw new InvalidOperationException();
                    }
                    ProtoReader.Seek(source, num, null);
                    bytesRead += num;
                }
            }while (flag);
            using (ProtoReader reader = new ProtoReader(source, this, context, num))
            {
                int key = this.GetKey(ref type);
                if ((key >= 0) && !Helpers.IsEnum(type))
                {
                    value = this.Deserialize(key, value, reader);
                }
                else if (!this.TryDeserializeAuxiliaryType(reader, DataFormat.Default, 1, type, ref value, true, false, true, false) && (num != 0))
                {
                    ThrowUnexpectedType(type);
                }
                bytesRead += reader.Position;
                haveObject = true;
                return(value);
            }
        }
コード例 #4
0
        public object DeserializeWithLengthPrefix(Stream source, object value, Type type, PrefixStyle style, int expectedField, ProtobufSerializer.TypeResolver resolver, out int bytesRead)
        {
            bool flag;

            return(this.DeserializeWithLengthPrefix(source, value, type, style, expectedField, resolver, out bytesRead, out flag, null));
        }
コード例 #5
0
        public object DeserializeWithLengthPrefix(Stream source, object value, Type type, PrefixStyle style, int expectedField, ProtobufSerializer.TypeResolver resolver)
        {
            int num;

            return(this.DeserializeWithLengthPrefix(source, value, type, style, expectedField, resolver, out num));
        }
コード例 #6
0
 public IEnumerable DeserializeItems(Stream source, Type type, PrefixStyle style, int expectedField, ProtobufSerializer.TypeResolver resolver, SerializationContext context)
 {
     return(new DeserializeItemsIterator(this, source, type, style, expectedField, resolver, context));
 }
コード例 #7
0
 public IEnumerable DeserializeItems(Stream source, Type type, PrefixStyle style, int expectedField, ProtobufSerializer.TypeResolver resolver)
 {
     return(this.DeserializeItems(source, type, style, expectedField, resolver, null));
 }