示例#1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="writer"></param>
        /// <param name="state"></param>
        public override void Serialize(object obj, XmlWriter writer, SerializationState state)
        {
            TypeSerializerWithSimpleTextSupport simpleSerializer;

            state.SerializationStart(obj);

            try
            {
                // Serialize attributes...

                foreach (LightSerializationMember smi in m_AttributeMembersMap.Values)
                {
                    object val;

                    val = smi.GetValue(obj);

                    if (smi.XmlTreatAsNullIfEmpty)
                    {
                        if (smi.LogicalType.IsValueType)
                        {
                            if (Activator.CreateInstance(smi.LogicalType).Equals(obj))
                            {
                                val = null;
                            }
                        }
                    }

                    if (state.ShouldSerialize(val))
                    {
                        simpleSerializer = (TypeSerializerWithSimpleTextSupport)smi.Serializer;

                        writer.WriteStartAttribute(smi.SerializedName, "");
                        writer.WriteString(simpleSerializer.Serialize(val, state));
                        writer.WriteEndAttribute();
                    }
                }

                // Serialize elements...

                foreach (LightSerializationMember smi in m_ElementMembersMap.Values)
                {
                    object val;

                    val = smi.GetValue(obj);

                    if (smi.XmlTreatAsNullIfEmpty)
                    {
                        if (smi.LogicalType.IsValueType)
                        {
                            if (Activator.CreateInstance(smi.LogicalType).Equals(val))
                            {
                                val = null;
                            }
                        }
                    }

                    if (smi.SerializeAsCData)
                    {
                        simpleSerializer = smi.Serializer as TypeSerializerWithSimpleTextSupport;
                    }
                    else
                    {
                        simpleSerializer = null;
                    }

                    if (state.ShouldSerialize(val))
                    {
                        writer.WriteStartElement(smi.SerializedName, "");

                        if (simpleSerializer != null)
                        {
                            writer.WriteCData(simpleSerializer.Serialize(val, state));
                        }
                        else
                        {
                            smi.Serializer.Serialize(val, writer, state);
                        }

                        writer.WriteEndElement();
                    }
                }
            }
            finally
            {
                state.SerializationEnd(obj);
            }
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="writer"></param>
        /// <param name="state"></param>
        public override void Serialize(object obj, XmlWriter writer, SerializationState state)
        {
            TypeSerializerWithSimpleTextSupport simpleSerializer;

            state.SerializationStart(obj);

            try
            {
                // Serialize attributes...

                foreach (SerializationMemberInfo smi in m_AttributeMembersMap.Values)
                {
                    object val;

                    val = smi.GetValue(obj);

                    if (smi.TreatAsNullIfEmpty)
                    {
                        if (smi.LogicalType.IsValueType)
                        {
                            if (Activator.CreateInstance(smi.LogicalType).Equals(obj))
                            {
                                val = null;
                            }
                        }
                    }

                    if (state.ShouldSerialize(val))
                    {
                        simpleSerializer = (TypeSerializerWithSimpleTextSupport)smi.Serializer;

                        writer.WriteStartAttribute(smi.SerializedName, "");
                        writer.WriteString(simpleSerializer.Serialize(val, state));
                        writer.WriteEndAttribute();
                    }
                }

                // Serialize elements...

                foreach (SerializationMemberInfo smi in m_ElementMembersMap.Values)
                {
                    object val;

                    val = smi.GetValue(obj);

                    if (smi.TreatAsNullIfEmpty)
                    {
                        if (smi.LogicalType.IsValueType)
                        {
                            if (Activator.CreateInstance(smi.LogicalType).Equals(val))
                            {
                                val = null;
                            }
                        }
                    }

                    simpleSerializer = smi.Serializer as TypeSerializerWithSimpleTextSupport;

                    if (state.ShouldSerialize(val))
                    {
                        if (smi.Namespace.Length > 0)
                        {
                            writer.WriteStartElement(state.Parameters.Namespaces.GetPrefix(smi.Namespace), smi.SerializedName, smi.Namespace);
                        }
                        else
                        {
                            writer.WriteStartElement(smi.SerializedName, "");
                        }

                        if (smi.SerializeAsValueNodeAttributeName != null)
                        {
                            writer.WriteAttributeString(smi.SerializeAsValueNodeAttributeName, val.ToString());
                        }
                        else if (smi.SerializeAsCData)
                        {
                            writer.WriteCData(simpleSerializer.Serialize(val, state));
                        }
                        else
                        {
                            smi.Serializer.Serialize(val, writer, state);
                        }

                        writer.WriteEndElement();
                    }
                }

            }
            finally
            {
                state.SerializationEnd(obj);
            }
        }