Exemplo n.º 1
0
        private static void AddMember(ServiceAssembly assembly, ServiceTypeFieldCollection result, MemberInfo member, Type memberType)
        {
            var attributes = member.GetCustomAttributes(typeof(ProtoMemberAttribute), true);

            if (attributes.Length == 0)
                return;

            Debug.Assert(attributes.Length == 1);

            var attribute = (ProtoMemberAttribute)attributes[0];

            var shouldSerializeMember = member.DeclaringType.GetMethod(
                "ShouldSerialize" + member.Name,
                BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic
            );

            result.Add(new ServiceTypeField(
                assembly,
                ReflectionOptimizer.BuildGetter(member),
                ReflectionOptimizer.BuildSetter(member, true),
                shouldSerializeMember == null ? null : ReflectionOptimizer.BuildShouldSerializeInvoker(shouldSerializeMember),
                attribute.Tag,
                attribute.IsRequired,
                memberType
            ));
        }
Exemplo n.º 2
0
        private static void AddMember(ServiceTypeFieldCollection result, MemberInfo member, Type memberType)
        {
            var attributes = member.GetCustomAttributes(typeof(ProtoMemberAttribute), true);

            if (attributes.Length == 0)
                return;

            Debug.Assert(attributes.Length == 1);

            var attribute = (ProtoMemberAttribute)attributes[0];

            result.Add(new ServiceTypeField(
                ReflectionOptimizer.BuildGetter(member),
                ReflectionOptimizer.BuildSetter(member, true),
                attribute.Tag,
                attribute.IsRequired,
                memberType
            ));
        }
Exemplo n.º 3
0
        private ServiceTypeFieldCollection BuildFields(Type type)
        {
            ServiceTypeFieldCollection result;

            if (!_fields.TryGetValue(type, out result))
            {
                result = new ServiceTypeFieldCollection();

                foreach (var field in type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance))
                {
                    AddMember(result, field, field.FieldType);
                }

                foreach (var property in type.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance))
                {
                    AddMember(result, property, property.PropertyType);
                }

                _fields[type] = result;
            }

            return result;
        }
Exemplo n.º 4
0
        private ServiceTypeFieldCollection BuildFields(ServiceAssembly assembly, Type type)
        {
            var result = new ServiceTypeFieldCollection();

            foreach (var field in type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance))
            {
                AddMember(assembly, result, field, field.FieldType);
            }

            foreach (var property in type.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance))
            {
                AddMember(assembly, result, property, property.PropertyType);
            }

            return result;
        }