Bender.Nodes.Object.ObjectNode.EnumerateMembers C# (CSharp) Method

EnumerateMembers() private method

private EnumerateMembers ( ) : IEnumerable
return IEnumerable
        private IEnumerable<MemberDefinition> EnumerateMembers()
        {
            var members = SpecifiedType.Members
                .Select(x => new MemberDefinition(x, GetMemberName(x),
                    ValueFactory.Create(Context.Mode, Source, x, Context.Options)
                ));

            if (Context.Mode.IsSerialize()) members = members
                .Where(x => !x.Member.IsOptional || x.Value.HasValue)
                .Where(x => !x.Member.IsProperty || x.Member.HasGetter)
                .Where(x => Context.Options.Serialization.IncludeNullMembers || x.Value.Instance != null)
                .Where(x => this.Walk<INode>(y => y.Parent).All(y => y.Value != x.Value.Instance));

            if (Context.Mode.IsDeserialize()) members = members.Where(x => !x.Member.IsReadonly);

            return members
                .Where(x => DefaultMemberFilter.And(Context.Options.MemberFilter)(x.Member, Context.Options))
                .Where(x => x.Value.SpecifiedType, x => Context.Options, Context.Options.TypeFilter).ToList();
        }