protected override MemberHandlerResult TryMap(MemberState s, ref MemberMainSettingsValue main, MemberInfo member, RuntimeTypeModel model)
        {
            if (s.Input.IsEnumValueMember)
            {
                return(MemberHandlerResult.NotFound);
            }
            // always consider ProtoMember if not strict Aqla
            // even if no [ProtoContract] was declared!
            if (!s.Input.CanUse(AttributeType.ProtoBuf))
            {
                return(MemberHandlerResult.NotFound);
            }
            if (HasProtobufNetIgnore(s.Input.Attributes, model))
            {
                return(MemberHandlerResult.Ignore);
            }
            var attrib = AttributeMap.GetAttribute(s.Input.Attributes, "ProtoBuf.ProtoMemberAttribute");

            if (attrib != null)
            {
                var r = _strategy.TryRead(attrib, s, member, model);
                // we have ref!
                main = s.MainValue;
                return(r);
            }
            return(MemberHandlerResult.NotFound);
        }
        static SerializableMemberAttribute MakeRuntime(RuntimeTypeModel rtm, Type t, string name)
        {
            var map     = AttributeMap.Create(rtm, t.GetProperty(name), true);
            var attr    = AttributeMap.GetAttribute(map, "AqlaSerializer.SerializableMemberAttribute");
            var runtime = attr.GetRuntimeAttribute <SerializableMemberAttribute>(rtm);

            return(runtime);
        }
Exemplo n.º 3
0
        private static bool HasCast(TypeModel model, Type type, Type from, Type to, out MethodInfo op)
        {
#if WINRT
            System.Collections.Generic.List <MethodInfo> list = new System.Collections.Generic.List <MethodInfo>();
            foreach (var item in type.GetRuntimeMethods())
            {
                if (item.IsStatic)
                {
                    list.Add(item);
                }
            }
            MethodInfo[] found = list.ToArray();
#else
            const BindingFlags flags = BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic;
            MethodInfo[]       found = type.GetMethods(flags);
#endif
            ParameterInfo[] paramTypes;

            for (int i = 0; i < found.Length; i++)
            {
                MethodInfo m = found[i];
                if (m.ReturnType != to)
                {
                    continue;
                }
                paramTypes = m.GetParameters();
                if (paramTypes.Length == 1 && paramTypes[0].ParameterType == from)
                {
                    if (AttributeMap.GetAttribute(AttributeMap.Create(model, m, false), "ProtoBuf.ProtoConverterAttribute") != null ||
                        AttributeMap.GetAttribute(AttributeMap.Create(model, m, false), "AqlaSerializer.SurrogateConverterAttribute") != null)
                    {
                        op = m;
                        return(true);
                    }
                }
            }

            for (int i = 0; i < found.Length; i++)
            {
                MethodInfo m = found[i];
                if ((m.Name != "op_Implicit" && m.Name != "op_Explicit") || m.ReturnType != to)
                {
                    continue;
                }
                paramTypes = m.GetParameters();
                if (paramTypes.Length == 1 && paramTypes[0].ParameterType == from)
                {
                    op = m;
                    return(true);
                }
            }
            op = null;
            return(false);
        }
Exemplo n.º 4
0
        protected virtual void ApplyDefaultBehaviour(MetaType metaType, MappedMember mappedMember, int?implicitFirstTag)
        {
            MemberInfo member;

            if (mappedMember == null || (member = mappedMember.Member) == null)
            {
                return;                                                                 // nix
            }
            var s = mappedMember.MappingState;

            AttributeMap[] attribs = AttributeMap.Create(Model, member, true);
            AttributeMap   attrib;

            if (s.SerializationSettings.DefaultValue == null && (attrib = AttributeMap.GetAttribute(attribs, "System.ComponentModel.DefaultValueAttribute")) != null)
            {
                object tmp;
                if (attrib.TryGet("Value", out tmp))
                {
                    var m = s.MainValue;
                    s.SerializationSettings.DefaultValue = tmp;
                    s.MainValue = m;
                }
            }

            {
                var level0 = mappedMember.MappingState.SerializationSettings.GetSettingsCopy(0).Basic;
                {
                    Type defaultType = level0.Collection.ConcreteType;
                    if (defaultType == null)
                    {
                        var memberType = level0.EffectiveType ?? Helpers.GetMemberType(mappedMember.Member);
                        if (Helpers.IsInterface(memberType) || Helpers.IsAbstract(memberType))
                        {
                            level0.Collection.ConcreteType = FindDefaultInterfaceImplementation(memberType);
                        }
                    }
                }
                mappedMember.MappingState.SerializationSettings.SetSettings(level0, 0);
            }

            if (implicitFirstTag != null && !s.TagIsPinned)
            {
                mappedMember.Tag = metaType.GetNextFreeFieldNumber(implicitFirstTag.Value);
            }

            if (mappedMember.MappingState.Input.IsEnumValueMember || mappedMember.Tag > 0)
            {
                metaType.Add(mappedMember);
            }
        }
Exemplo n.º 5
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.SystemNonSerialized))
            {
                return(MemberHandlerResult.NotFound);
            }
            var attrib = AttributeMap.GetAttribute(s.Input.Attributes, "System.NonSerializedAttribute");

            if (attrib != null)
            {
                return(MemberHandlerResult.Ignore);
            }
            return(MemberHandlerResult.NotFound);
        }
        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.DataContract))
            {
                return(MemberHandlerResult.NotFound);
            }

            if (!s.Input.HasFamily(MetaType.AttributeFamily.DataContractSerialier))
            {
                return(MemberHandlerResult.NotFound);
            }
            var attrib = AttributeMap.GetAttribute(s.Input.Attributes, "System.Runtime.Serialization.DataMemberAttribute");

            if (attrib == null)
            {
                return(MemberHandlerResult.NotFound);
            }

            if (main.Tag <= 0)
            {
                attrib.TryGetNotDefault("Order", ref main.Tag);
            }
            if (string.IsNullOrEmpty(main.Name))
            {
                attrib.TryGetNotEmpty("Name", ref main.Name);
            }
            if (!main.IsRequiredInSchema)
            {
                attrib.TryGetNotDefault("IsRequired", ref main.IsRequiredInSchema);
            }
            bool done = main.Tag >= s.MinAcceptFieldNumber;

            if (done)
            {
                main.Tag += s.Input.DataMemberOffset; // dataMemberOffset only applies to DCS flags, to allow us to "bump" WCF by a notch
                return(MemberHandlerResult.Done);
            }
            return(MemberHandlerResult.Partial);
        }
        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.Xml))
            {
                return(MemberHandlerResult.NotFound);
            }
            if (AttributeMap.GetAttribute(s.Input.Attributes, "System.Xml.Serialization.XmlIgnoreAttribute") != null)
            {
                return(MemberHandlerResult.Ignore);
            }
            if (!s.Input.HasFamily(MetaType.AttributeFamily.XmlSerializer))
            {
                return(MemberHandlerResult.NotFound);
            }
            var attrib = AttributeMap.GetAttribute(s.Input.Attributes, "System.Xml.Serialization.XmlElementAttribute")
                         ?? AttributeMap.GetAttribute(s.Input.Attributes, "System.Xml.Serialization.XmlArrayAttribute");

            if (attrib == null)
            {
                return(MemberHandlerResult.NotFound);
            }

            if (main.Tag <= 0)
            {
                attrib.TryGetNotDefault("Order", ref main.Tag);
            }
            if (string.IsNullOrEmpty(main.Name))
            {
                attrib.TryGetNotEmpty("ElementName", ref main.Name);
            }

            return(main.Tag >= s.MinAcceptFieldNumber ? MemberHandlerResult.Done : MemberHandlerResult.Partial);
        }
 protected virtual bool HasProtobufNetIgnore(AttributeMap[] map, RuntimeTypeModel model)
 {
     return(AttributeMap.GetAttribute(map, "ProtoBuf.ProtoIgnoreAttribute") != null);
 }
Exemplo n.º 9
0
        protected override AttributeMap GetAttribute(MemberState s)
        {
            AttributeMap attrib = AttributeMap.GetAttribute(s.Input.Attributes, "AqlaSerializer.EnumSerializableValueAttribute");

            return(attrib != null && CheckAqlaModelId(attrib, s.Input.Model) ? attrib : null);
        }
Exemplo n.º 10
0
 protected override AttributeMap GetAttribute(MemberState s)
 {
     return(AttributeMap.GetAttribute(s.Input.Attributes, "ProtoBuf.ProtoEnumAttribute"));
 }