Ejemplo n.º 1
0
        /// <summary>
        /// Serializes the members.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <param name="membersToSerialize">The members to serialize.</param>
        protected virtual void SerializeMembers(ISerializationContext <TSerializationContextInfo> context, List <MemberValue> membersToSerialize)
        {
            ApiCop.UpdateRule <InitializationApiCopRule>("SerializerBase.WarmupAtStartup",
                                                         x => x.SetInitializationMode(InitializationMode.Lazy, GetType().GetSafeFullName(false)));

            if (membersToSerialize.Count == 0)
            {
                return;
            }

            using (GetCurrentSerializationScopeManager(context.Configuration))
            {
                var serializerModifiers = SerializationManager.GetSerializerModifiers(context.ModelType);

                foreach (var member in membersToSerialize)
                {
                    bool skipByModifiers = false;
                    foreach (var serializerModifier in serializerModifiers)
                    {
                        if (serializerModifier.ShouldIgnoreMember(context, context.Model, member))
                        {
                            skipByModifiers = true;
                            break;
                        }
                    }

                    if (skipByModifiers)
                    {
                        continue;
                    }

                    var memberSerializationEventArgs = new MemberSerializationEventArgs(context, member);

                    SerializingMember?.Invoke(this, memberSerializationEventArgs);

                    BeforeSerializeMember(context, member);

                    foreach (var serializerModifier in serializerModifiers)
                    {
                        serializerModifier.SerializeMember(context, member);
                    }

                    if (ShouldSerializeUsingParseAndToString(member, true))
                    {
                        var objectToStringValue = SerializeUsingObjectToString(context, member);
                        if (!string.IsNullOrWhiteSpace(objectToStringValue))
                        {
                            member.Value = objectToStringValue;
                        }
                    }

                    SerializeMember(context, member);

                    AfterSerializeMember(context, member);

                    SerializedMember?.Invoke(this, memberSerializationEventArgs);
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Starts member serialization by invoking all the right events.
        /// </summary>
        /// <param name="context">The serialization context.</param>
        /// <param name="member">The member that is about to be serialized.</param>
        /// <param name="serializerModifiers">The serializer modifiers.</param>
        protected bool StartMemberSerialization(ISerializationContext <TSerializationContextInfo> context,
                                                MemberValue member, ISerializerModifier[] serializerModifiers)
        {
            var skipByModifiers = false;

            foreach (var serializerModifier in serializerModifiers)
            {
                if (serializerModifier.ShouldIgnoreMember(context, context.Model, member))
                {
                    skipByModifiers = true;
                    break;
                }
            }

            if (skipByModifiers)
            {
                return(false);
            }

            SerializingMember?.Invoke(this, new MemberSerializationEventArgs(context, member));

            BeforeSerializeMember(context, member);

            foreach (var serializerModifier in serializerModifiers)
            {
                serializerModifier.SerializeMember(context, member);
            }

            if (ShouldSerializeUsingParseAndToString(member, true))
            {
                var objectToStringValue = SerializeUsingObjectToString(context, member);
                if (!string.IsNullOrWhiteSpace(objectToStringValue))
                {
                    member.Value = objectToStringValue;
                }
            }

            return(true);
        }