protected override MemberHandlerResult TryMap(MemberState s, ref MemberMainSettingsValue main, MemberInfo member, RuntimeTypeModel model) { if (s.Input.IsEnumValueMember) { return(MemberHandlerResult.NotFound); } if (!s.Input.CanUse(AttributeType.Aqla)) { return(MemberHandlerResult.NotFound); } if (HasAqlaIgnore(s.Input.Attributes, model)) { return(MemberHandlerResult.Ignore); } MemberHandlerResult result = MemberHandlerResult.NotFound; foreach (AttributeMap ppma in s.Input.PartialMembers) { object tmp; if (!ppma.TryGet("MemberName", out tmp) || tmp as string != member.Name) { continue; } if (ppma.AttributeType.FullName == "AqlaSerializer.PartialNonSerializableMemberAttribute" && CheckAqlaModelId(ppma, model)) { return(MemberHandlerResult.Ignore); } MemberHandlerResult newResult; if (Helpers.IsAssignableFrom(model.MapType(typeof(SerializablePartialMemberAttribute)), ppma.AttributeType)) { var attr = ppma.GetRuntimeAttribute <SerializablePartialMemberAttribute>(model); main = attr.MemberSettings; s.SerializationSettings.DefaultValue = attr.DefaultValue; s.SerializationSettings.SetSettings(attr.LevelSettings, 0); s.TagIsPinned = main.Tag > 0; newResult = s.TagIsPinned ? MemberHandlerResult.Done : MemberHandlerResult.Partial; } else { newResult = MemberHandlerResult.NotFound; } if (newResult == MemberHandlerResult.Done) { return(MemberHandlerResult.Done); } if (newResult == MemberHandlerResult.Partial) { result = newResult; } } return(result); }
protected override MemberHandlerResult TryMap(MemberState s, ref MemberMainSettingsValue main, MemberInfo member, RuntimeTypeModel model) { if (s.Input.IsEnumValueMember) { return(MemberHandlerResult.NotFound); } if (!s.Input.CanUse(AttributeType.ProtoBuf)) { return(MemberHandlerResult.NotFound); } if (HasProtobufNetIgnore(s.Input.Attributes, model)) { return(MemberHandlerResult.Ignore); } MemberHandlerResult result = MemberHandlerResult.NotFound; foreach (AttributeMap ppma in s.Input.PartialMembers) { object tmp; if (!ppma.TryGet("MemberName", out tmp) || tmp as string != member.Name) { continue; } if (ppma.AttributeType.FullName == "ProtoBuf.ProtoPartialIgnoreAttribute") { return(MemberHandlerResult.Ignore); } MemberHandlerResult newResult; if (ppma.AttributeType.FullName == "ProtoBuf.ProtoPartialMemberAttribute") { newResult = _strategy.TryRead(ppma, s, member, model); // we have ref! main = s.MainValue; } else { newResult = MemberHandlerResult.NotFound; } if (newResult == MemberHandlerResult.Done) { return(MemberHandlerResult.Done); } if (newResult == MemberHandlerResult.Partial) { result = newResult; } } return(result); }
protected virtual MemberHandlerResult ProcessHandlers(MemberState state) { MemberHandlerResult result = MemberHandlerResult.NotFound; foreach (var handler in Handlers) { switch (result = handler.TryMap(state)) { case MemberHandlerResult.Ignore: return(result); case MemberHandlerResult.Done: break; } } return(result); }