public TupleSerializer(RuntimeTypeModel model, ConstructorInfo ctor, MemberInfo[] members, Type[] kv) { if (ctor == null) { throw new ArgumentNullException("ctor"); } if (members == null) { throw new ArgumentNullException("members"); } this.ctor = ctor; this.members = members; this.tails = new IProtoSerializer[members.Length]; ParameterInfo[] parameters = ctor.GetParameters(); for (int i = 0; i < members.Length; i++) { WireType wireType; Type finalType = parameters[i].ParameterType; Type itemType = null, defaultType = null; MetaType.ResolveListTypes(model, finalType, ref itemType, ref defaultType); Type tmp = itemType == null ? finalType : itemType; bool asReference = false; int typeIndex = model.FindOrAddAuto(tmp, false, true, false); if (typeIndex >= 0) { asReference = model[tmp].AsReferenceDefault; } if (tmp.FullName == "ILRuntime.Runtime.Intepreter.ILTypeInstance") { tmp = kv [i]; } IProtoSerializer tail = ValueMember.TryGetCoreSerializer(model, DataFormat.Default, tmp, out wireType, asReference, false, false, true), serializer; if (tail == null) { throw new InvalidOperationException("No serializer defined for type: " + tmp.FullName); } tail = new TagDecorator(i + 1, wireType, false, tail); if (itemType == null) { serializer = tail; } else { if (finalType.IsArray) { serializer = new ArrayDecorator(model, tail, i + 1, false, wireType, finalType, false, false); } else { serializer = ListDecorator.Create(model, finalType, defaultType, tail, i + 1, false, wireType, true, false, false); } } tails[i] = serializer; } }
public TupleSerializer(RuntimeTypeModel model, ConstructorInfo ctor, MemberInfo[] members) { if (ctor == null) { throw new ArgumentNullException("ctor"); } if (members == null) { throw new ArgumentNullException("members"); } this.ctor = ctor; this.members = members; this.tails = new IProtoSerializer[members.Length]; ParameterInfo[] parameters = ctor.GetParameters(); for (int i = 0; i < members.Length; i++) { Type parameterType = parameters[i].get_ParameterType(); Type type = null; Type concreteType = null; MetaType.ResolveListTypes(model, parameterType, ref type, ref concreteType); Type type2 = (type != null) ? type : parameterType; bool asReference = false; int num = model.FindOrAddAuto(type2, false, true, false); if (num >= 0) { asReference = model[type2].AsReferenceDefault; } WireType wireType; IProtoSerializer protoSerializer = ValueMember.TryGetCoreSerializer(model, DataFormat.Default, type2, out wireType, asReference, false, false, true); if (protoSerializer == null) { throw new InvalidOperationException("No serializer defined for type: " + type2.get_FullName()); } protoSerializer = new TagDecorator(i + 1, wireType, false, protoSerializer); IProtoSerializer protoSerializer2; if (type == null) { protoSerializer2 = protoSerializer; } else if (parameterType.get_IsArray()) { protoSerializer2 = new ArrayDecorator(model, protoSerializer, i + 1, false, wireType, parameterType, false, false); } else { protoSerializer2 = ListDecorator.Create(model, parameterType, concreteType, protoSerializer, i + 1, false, wireType, true, false, false); } this.tails[i] = protoSerializer2; } }
public TupleSerializer(RuntimeTypeModel model, ConstructorInfo ctor, MemberInfo[] members) { WireType wireType; IProtoSerializer arrayDecorator; if (ctor == null) { throw new ArgumentNullException("ctor"); } if (members == null) { throw new ArgumentNullException("members"); } this.ctor = ctor; this.members = members; this.tails = new IProtoSerializer[(int)members.Length]; ParameterInfo[] parameters = ctor.GetParameters(); for (int i = 0; i < (int)members.Length; i++) { Type parameterType = parameters[i].ParameterType; Type type = null; Type type1 = null; MetaType.ResolveListTypes(model, parameterType, ref type, ref type1); Type type2 = (type == null ? parameterType : type); bool asReferenceDefault = false; if (model.FindOrAddAuto(type2, false, true, false) >= 0) { asReferenceDefault = model[type2].AsReferenceDefault; } IProtoSerializer tagDecorator = ValueMember.TryGetCoreSerializer(model, DataFormat.Default, type2, out wireType, asReferenceDefault, false, false, true); if (tagDecorator == null) { throw new InvalidOperationException(string.Concat("No serializer defined for type: ", type2.FullName)); } tagDecorator = new TagDecorator(i + 1, wireType, false, tagDecorator); if (type == null) { arrayDecorator = tagDecorator; } else if (!parameterType.IsArray) { arrayDecorator = ListDecorator.Create(model, parameterType, type1, tagDecorator, i + 1, false, wireType, true, false, false); } else { arrayDecorator = new ArrayDecorator(model, tagDecorator, i + 1, false, wireType, parameterType, false, false); } this.tails[i] = arrayDecorator; } }
public TupleSerializer(RuntimeTypeModel model, ConstructorInfo ctor, MemberInfo[] members) { if (ctor == null) { throw new ArgumentNullException("ctor"); } if (members == null) { throw new ArgumentNullException("members"); } this.ctor = ctor; this.members = members; this.tails = new IProtoSerializer[members.Length]; ParameterInfo[] parameters = ctor.GetParameters(); for (int i = 0; i < members.Length; i++) { WireType type; IProtoSerializer serializer2; Type parameterType = parameters[i].ParameterType; Type itemType = null; Type defaultType = null; MetaType.ResolveListTypes(model, parameterType, ref itemType, ref defaultType); Type type5 = (itemType == null) ? parameterType : itemType; bool asReference = false; if (model.FindOrAddAuto(type5, false, true, false) >= 0) { asReference = model[type5].AsReferenceDefault; } IProtoSerializer tail = ValueMember.TryGetCoreSerializer(model, DataFormat.Default, type5, out type, asReference, false, false, true); if (tail == null) { throw new InvalidOperationException("No serializer defined for type: " + type5.FullName); } tail = new TagDecorator(i + 1, type, false, tail); if (itemType == null) { serializer2 = tail; } else if (parameterType.IsArray) { serializer2 = new ArrayDecorator(model, tail, i + 1, false, type, parameterType, false, false); } else { serializer2 = new ListDecorator(model, parameterType, defaultType, tail, i + 1, false, type, true, false, false); } this.tails[i] = serializer2; } }
public TupleSerializer(RuntimeTypeModel model, ConstructorInfo ctor, MemberInfo[] members) { if (ctor == (ConstructorInfo)null) { throw new ArgumentNullException("ctor"); } if (members == null) { throw new ArgumentNullException("members"); } this.ctor = ctor; this.members = members; tails = new IProtoSerializer[members.Length]; ParameterInfo[] parameters = ctor.GetParameters(); int num = 0; Type type2; while (true) { if (num < members.Length) { Type parameterType = parameters[num].ParameterType; Type type = null; Type concreteType = null; MetaType.ResolveListTypes(model, parameterType, ref type, ref concreteType); type2 = ((type == (Type)null) ? parameterType : type); bool asReference = false; if (model.FindOrAddAuto(type2, false, true, false) >= 0) { asReference = model[type2].AsReferenceDefault; } IProtoSerializer protoSerializer = ValueMember.TryGetCoreSerializer(model, DataFormat.Default, type2, out WireType wireType, asReference, false, false, true); if (protoSerializer != null) { protoSerializer = new TagDecorator(num + 1, wireType, false, protoSerializer); IProtoSerializer protoSerializer2 = (!(type == (Type)null)) ? ((!parameterType.IsArray) ? ((ProtoDecoratorBase)ListDecorator.Create(model, parameterType, concreteType, protoSerializer, num + 1, false, wireType, true, false, false)) : ((ProtoDecoratorBase) new ArrayDecorator(model, protoSerializer, num + 1, false, wireType, parameterType, false, false))) : protoSerializer; tails[num] = protoSerializer2; num++; continue; } break; } return; } throw new InvalidOperationException("No serializer defined for type: " + type2.FullName); }
public TupleSerializer(RuntimeTypeModel model, ConstructorInfo ctor, MemberInfo[] members) { if (ctor == null) { throw new ArgumentNullException("ctor"); } if (members == null) { throw new ArgumentNullException("members"); } this.ctor = ctor; this.members = members; tails = new IProtoSerializer[members.Length]; ParameterInfo[] parameters = ctor.GetParameters(); int num = 0; Type type; while (true) { if (num < members.Length) { Type parameterType = parameters[num].ParameterType; Type itemType = null; Type defaultType = null; MetaType.ResolveListTypes(model, parameterType, ref itemType, ref defaultType); type = ((itemType == null) ? parameterType : itemType); bool asReference = false; if (model.FindOrAddAuto(type, demand: false, addWithContractOnly: true, addEvenIfAutoDisabled: false) >= 0) { asReference = model[type].AsReferenceDefault; } IProtoSerializer protoSerializer = ValueMember.TryGetCoreSerializer(model, DataFormat.Default, type, out WireType defaultWireType, asReference, dynamicType: false, overwriteList: false, allowComplexTypes: true); if (protoSerializer == null) { break; } protoSerializer = new TagDecorator(num + 1, defaultWireType, strict: false, protoSerializer); IProtoSerializer protoSerializer2 = (itemType != null) ? ((!parameterType.IsArray) ? ((ProtoDecoratorBase)ListDecorator.Create(model, parameterType, defaultType, protoSerializer, num + 1, writePacked: false, defaultWireType, returnList: true, overwriteList: false, supportNull: false)) : ((ProtoDecoratorBase) new ArrayDecorator(model, protoSerializer, num + 1, writePacked: false, defaultWireType, parameterType, overwriteList: false, supportNull: false))) : protoSerializer; tails[num] = protoSerializer2; num++; continue; } return; } throw new InvalidOperationException("No serializer defined for type: " + type.FullName); }
public TupleSerializer(RuntimeTypeModel model, ConstructorInfo ctor, MemberInfo[] members, SerializerFeatures features, CompatibilityLevel compatibilityLevel) { this.ctor = ctor ?? throw new ArgumentNullException(nameof(ctor)); this.members = members ?? throw new ArgumentNullException(nameof(members)); this.tails = new IRuntimeProtoSerializerNode[members.Length]; Features = features; ParameterInfo[] parameters = ctor.GetParameters(); for (int i = 0; i < members.Length; i++) { Type finalType = parameters[i].ParameterType; var repeated = model.TryGetRepeatedProvider(finalType); Type tmp = repeated?.ItemType ?? finalType; bool asReference = false; int typeIndex = model.FindOrAddAuto(tmp, false, true, false, compatibilityLevel); if (typeIndex >= 0) { asReference = model[tmp].AsReferenceDefault; } IRuntimeProtoSerializerNode tail = ValueMember.TryGetCoreSerializer(model, DataFormat.Default, compatibilityLevel, tmp, out WireType wireType, asReference, false, false, true), serializer; if (tail == null) { throw new InvalidOperationException("No serializer defined for type: " + tmp.FullName); } if (repeated == null) { serializer = new TagDecorator(i + 1, wireType, false, tail); } else if (repeated.IsMap) { serializer = ValueMember.CreateMap(repeated, model, DataFormat.Default, compatibilityLevel, DataFormat.Default, DataFormat.Default, asReference, false, true, false, i + 1); } else { SerializerFeatures listFeatures = wireType.AsFeatures() | SerializerFeatures.OptionPackedDisabled; serializer = RepeatedDecorator.Create(repeated, i + 1, listFeatures, compatibilityLevel, DataFormat.Default); } tails[i] = serializer; } }