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); }
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); }
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); } }
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); }
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); }
protected override AttributeMap GetAttribute(MemberState s) { return(AttributeMap.GetAttribute(s.Input.Attributes, "ProtoBuf.ProtoEnumAttribute")); }