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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }