ShouldSerialize() public method

Checks if see if an object should be serialized.

An object shouldn't be serialized if it has already been serialized. This method automatically checks if the object has been serialized by examining the serialization stack. This stack is maintained by the SerializationStart and SerializationEnd methods.

You should call SerializationStart and SerializationEnd when you start and finish serializing an object.

public ShouldSerialize ( object obj, SerializationMemberInfo memberInfo ) : bool
obj object
memberInfo SerializationMemberInfo
return bool
Example #1
0
        protected virtual void SerializeText(object obj, XmlWriter writer, SerializationContext state)
        {
            //Nothing to serialize
            if (TextMember == null)
            {
                return;
            }
            var memberInfo = TextMember;

            object val;

            // Get the value of the field/property to be serialized from the object
            val = memberInfo.GetValue(obj);

            // If the valuetype field should be treated as null if it is empty then make val null.
            if (memberInfo.TreatAsNullIfEmpty)
            {
                if (memberInfo.ReturnType.IsValueType)
                {
                    if (Activator.CreateInstance(memberInfo.ReturnType).Equals(val))
                    {
                        val = null;
                    }
                }
            }

            // Make sure we aren't serializing recursively.
            if (state.ShouldSerialize(val, memberInfo))
            {
                try
                {
                    state.PushCurrentMemberInfo(memberInfo);

                    // Get the TypeSerializerWithSimpleTextSupport
                    var simpleSerializer = memberInfo.GetSerializer(obj) as TypeSerializerWithSimpleTextSupport;

                    // Make sure the serializer supports SimpleText
                    if (simpleSerializer == null)
                    {
                        throw new XmlSerializerException(String.Format(TextResources.NoTextSerializerWithSimpleTextSupport, memberInfo.MemberInfo.Name));
                    }

                    if (memberInfo.SerializeAsCData)
                    {
                        writer.WriteCData(simpleSerializer.Serialize(val, state));
                    }
                    else
                    {
                        writer.WriteString(simpleSerializer.Serialize(val, state));
                    }
                }
                finally
                {
                    state.PopCurrentMemberInfo();
                }
            }
        }
		protected override void SerializeElements(object obj, XmlWriter writer, SerializationContext state)
		{
			base.SerializeElements (obj, writer, state);

			foreach (var item in (System.Collections.IEnumerable)obj)
			{
				if (state.ShouldSerialize(item, this.serializationMemberInfo))
				{
					ListItem listItem;

					if (typeToItemMap.TryGetValue(item.GetType(), out listItem))
					{
						writer.WriteStartElement(listItem.Alias);

						if (listItem.Attribute != null
							&& listItem.Attribute.SerializeAsValueNode
							&& listItem.Attribute.ValueNodeAttributeName != null
							&& listItem.Serializer is TypeSerializerWithSimpleTextSupport)
						{
							writer.WriteAttributeString(listItem.Attribute.ValueNodeAttributeName,
								((TypeSerializerWithSimpleTextSupport)listItem.Serializer).Serialize(item, state));
						}
						else
						{
							listItem.Serializer.Serialize(item, writer, state);
						}
					}
					else
					{
						if (this.dynamicTypeResolver == null)
						{
							throw new XmlSerializerException();
						}
						else
						{
							var type = this.dynamicTypeResolver.GetType(item);

							if (type == null)
							{
								throw new XmlSerializerException();
							}

							var serializer = cache.GetTypeSerializerBySupportedType(type);

							writer.WriteStartElement(this.dynamicTypeResolver.GetName(item));

							serializer.Serialize(item, writer, state);
						}
					}

					writer.WriteEndElement();
				}
			}
		}
Example #3
0
        protected virtual void SerializeAttributes(object obj, XmlWriter writer, SerializationContext state)
        {
            foreach (SerializationMemberInfo memberInfo in attributeMembersMap.Values)
            {
                object val;

                // Get the value of the field/property to be serialized from the object
                val = memberInfo.GetValue(obj);

                // If the valuetype field should be treated as null if it is empty then make val null.
                if (memberInfo.TreatAsNullIfEmpty)
                {
                    if (memberInfo.ReturnType.IsValueType)
                    {
                        if (Activator.CreateInstance(memberInfo.ReturnType).Equals(val))
                        {
                            val = null;
                        }
                    }
                }

                // Make sure we aren't serializing recursively.
                if (state.ShouldSerialize(val, memberInfo))
                {
                    try
                    {
                        state.PushCurrentMemberInfo(memberInfo);

                        // Get the TypeSerializerWithSimpleTextSupport
                        var simpleSerializer = memberInfo.GetSerializer(obj) as TypeSerializerWithSimpleTextSupport;

                        // Make sure the serializer supports SimpleText
                        if (simpleSerializer == null)
                        {
                            throw new XmlSerializerException(String.Format(TextResources.NoTextSerializerWithSimpleTextSupport, memberInfo.MemberInfo.Name));
                        }

                        // Write the start of the attribute.
                        writer.WriteStartAttribute(memberInfo.SerializedName);

                        // Write the attribute value.
                        writer.WriteString(simpleSerializer.Serialize(val, state));

                        // Write the end of the attribute
                        writer.WriteEndAttribute();
                    }
                    finally
                    {
                        state.PopCurrentMemberInfo();
                    }
                }
            }
        }
Example #4
0
        protected virtual void SerializeElements(object obj, XmlWriter writer, SerializationContext state)
        {
            foreach (SerializationMemberInfo memberInfo in elementMembersMap.Values)
            {
                state.PushCurrentMemberInfo(memberInfo);

                try
                {
                    object val;

                    val = memberInfo.GetValue(obj);

                    if (memberInfo.TreatAsNullIfEmpty)
                    {
                        if (memberInfo.ReturnType.IsValueType)
                        {
                            if (Activator.CreateInstance(memberInfo.ReturnType).Equals(val))
                            {
                                val = null;
                            }
                        }
                    }

                    var serializer = memberInfo.GetSerializer(val);

                    var serializerWithSimpleText = serializer as TypeSerializerWithSimpleTextSupport;

                    if (state.ShouldSerialize(val, memberInfo))
                    {
                        if (memberInfo.Namespace.Length > 0)
                        {
                            // Write start element with namespace

                            writer.WriteStartElement(state.Parameters.Namespaces.GetPrefix(memberInfo.Namespace), memberInfo.SerializedName, memberInfo.Namespace);
                        }
                        else
                        {
                            // Write start element without namespace

                            writer.WriteStartElement(memberInfo.SerializedName);
                        }

                        if (memberInfo.SerializeAsValueNodeAttributeName != null)
                        {
                            if (serializerWithSimpleText == null)
                            {
                                throw new XmlSerializerException(String.Format(TextResources.NoTextSerializerWithSimpleTextSupport, memberInfo.MemberInfo.Name));
                            }

                            writer.WriteAttributeString(memberInfo.SerializeAsValueNodeAttributeName, serializerWithSimpleText.Serialize(val, state));
                        }
                        else if (memberInfo.SerializeAsCData)
                        {
                            if (serializerWithSimpleText == null)
                            {
                                throw new XmlSerializerException(String.Format(TextResources.NoTextSerializerWithSimpleTextSupport, memberInfo.MemberInfo.Name));
                            }

                            writer.WriteCData(serializerWithSimpleText.Serialize(val, state));
                        }
                        else
                        {
                            memberInfo.GetSerializer(val).Serialize(val, writer, state);
                        }

                        writer.WriteEndElement();
                    }
                }
                finally
                {
                    state.PopCurrentMemberInfo();
                }
            }
        }
        protected virtual void SerializeText(object obj, XmlWriter writer, SerializationContext state)
        {
            //Nothing to serialize
            if (TextMember == null)
                return;
            var memberInfo = TextMember;

            object val;

            // Get the value of the field/property to be serialized from the object
            val = memberInfo.GetValue(obj);

            // If the valuetype field should be treated as null if it is empty then make val null.
            if (memberInfo.TreatAsNullIfEmpty)
            {
                if (memberInfo.ReturnType.IsValueType)
                {
                    if (Activator.CreateInstance(memberInfo.ReturnType).Equals(val))
                    {
                        val = null;
                    }
                }
            }

            // Make sure we aren't serializing recursively.
            if (state.ShouldSerialize(val,memberInfo))
            {
                try
                {
                    state.PushCurrentMemberInfo(memberInfo);

                    // Get the TypeSerializerWithSimpleTextSupport
                    var simpleSerializer = memberInfo.GetSerializer(obj) as TypeSerializerWithSimpleTextSupport;

                    // Make sure the serializer supports SimpleText
                    if (simpleSerializer == null)
                    {
                        throw new XmlSerializerException(String.Format(TextResources.NoTextSerializerWithSimpleTextSupport, memberInfo.MemberInfo.Name));
                    }

                    if (memberInfo.SerializeAsCData)
                    {
                        writer.WriteCData(simpleSerializer.Serialize(val, state));
                    }
                    else
                    {
                        writer.WriteString(simpleSerializer.Serialize(val, state));
                    }
                }
                finally
                {
                    state.PopCurrentMemberInfo();
                }
            }
        }
        protected virtual void SerializeElements(object obj, XmlWriter writer, SerializationContext state)
        {
            foreach (SerializationMemberInfo memberInfo in elementMembersMap.Values)
            {
                state.PushCurrentMemberInfo(memberInfo);

                try
                {
                    object val;

                    val = memberInfo.GetValue(obj);

                    if (memberInfo.TreatAsNullIfEmpty)
                    {
                        if (memberInfo.ReturnType.IsValueType)
                        {
                            if (Activator.CreateInstance(memberInfo.ReturnType).Equals(val))
                            {
                                val = null;
                            }
                        }
                    }

                    var serializer = memberInfo.GetSerializer(val);

                    var serializerWithSimpleText = serializer as TypeSerializerWithSimpleTextSupport;

                    if (state.ShouldSerialize(val,memberInfo))
                    {
                        if (memberInfo.Namespace.Length > 0)
                        {
                            // Write start element with namespace

                            writer.WriteStartElement(state.Parameters.Namespaces.GetPrefix(memberInfo.Namespace), memberInfo.SerializedName, memberInfo.Namespace);
                        }
                        else
                        {
                            // Write start element without namespace

                            writer.WriteStartElement(memberInfo.SerializedName);
                        }

                        if (memberInfo.SerializeAsValueNodeAttributeName != null)
                        {
                            if (serializerWithSimpleText == null)
                            {
                                throw new XmlSerializerException(String.Format(TextResources.NoTextSerializerWithSimpleTextSupport, memberInfo.MemberInfo.Name));
                            }

                            writer.WriteAttributeString(memberInfo.SerializeAsValueNodeAttributeName, serializerWithSimpleText.Serialize(val, state));
                        }
                        else if (memberInfo.SerializeAsCData)
                        {
                            if (serializerWithSimpleText == null)
                            {
                                throw new XmlSerializerException(String.Format(TextResources.NoTextSerializerWithSimpleTextSupport, memberInfo.MemberInfo.Name));
                            }

                            writer.WriteCData(serializerWithSimpleText.Serialize(val, state));
                        }
                        else
                        {
                            memberInfo.GetSerializer(val).Serialize(val, writer, state);
                        }

                        writer.WriteEndElement();
                    }
                }
                finally
                {
                    state.PopCurrentMemberInfo();
                }
            }
        }
        protected virtual void SerializeAttributes(object obj, XmlWriter writer, SerializationContext state)
        {
            foreach (SerializationMemberInfo memberInfo in attributeMembersMap.Values)
            {
                object val;

                // Get the value of the field/property to be serialized from the object
                val = memberInfo.GetValue(obj);

                // If the valuetype field should be treated as null if it is empty then make val null.
                if (memberInfo.TreatAsNullIfEmpty)
                {
                    if (memberInfo.ReturnType.IsValueType)
                    {
                        if (Activator.CreateInstance(memberInfo.ReturnType).Equals(val))
                        {
                            val = null;
                        }
                    }
                }

                // Make sure we aren't serializing recursively.
                if (state.ShouldSerialize(val,memberInfo))
                {
                    try
                    {
                        state.PushCurrentMemberInfo(memberInfo);

                        // Get the TypeSerializerWithSimpleTextSupport
                        var simpleSerializer = memberInfo.GetSerializer(obj) as TypeSerializerWithSimpleTextSupport;

                        // Make sure the serializer supports SimpleText
                        if (simpleSerializer == null)
                        {
                            throw new XmlSerializerException(String.Format(TextResources.NoTextSerializerWithSimpleTextSupport, memberInfo.MemberInfo.Name));
                        }

                        // Write the start of the attribute.
                        writer.WriteStartAttribute(memberInfo.SerializedName);

                        // Write the attribute value.
                        writer.WriteString(simpleSerializer.Serialize(val, state));

                        // Write the end of the attribute
                        writer.WriteEndAttribute();
                    }
                    finally
                    {
                        state.PopCurrentMemberInfo();
                    }
                }
            }
        }
        protected override void SerializeElements(object obj, XmlWriter writer, SerializationContext state)
        {
            base.SerializeElements (obj, writer, state);

            foreach (var item in (System.Collections.IEnumerable)obj)
            {
                if (state.ShouldSerialize(item, this.serializationMemberInfo))
                {
                    ListItem listItem;

                    if (TryGetItemByType(item.GetType(), out listItem))
                    {
                        writer.WriteStartElement(listItem.Alias);

                        if (listItem.Attribute != null
                            && listItem.Attribute.SerializeAsValueNode
                            && listItem.Attribute.ValueNodeAttributeName != null
                            && listItem.Serializer is TypeSerializerWithSimpleTextSupport)
                        {
                            writer.WriteAttributeString(listItem.Attribute.ValueNodeAttributeName,
                                ((TypeSerializerWithSimpleTextSupport)listItem.Serializer).Serialize(item, state));
                        }
                        else
                        {
                            listItem.Serializer.Serialize(item, writer, state);
                        }
                    }
                    else
                    {
                        if (this.dynamicTypeResolver == null)
                        {
                            throw new XmlSerializerException();
                        }
                        else
                        {
                            var type = this.dynamicTypeResolver.GetType(item);

                            if (type == null)
                            {
                                throw new XmlSerializerException();
                            }

                            var serializer = cache.GetTypeSerializerBySupportedType(type);

                            writer.WriteStartElement(this.dynamicTypeResolver.GetName(item));

                            serializer.Serialize(item, writer, state);
                        }
                    }

                    writer.WriteEndElement();
                }
            }
        }