public virtual object GetValueFromString(ValueTypePropertyDescriptor metadata, string attValue, Type type, XmlSerializerContext context)
 {
     try
     {
         if (string.IsNullOrEmpty(attValue))
         {
             return(this.GetDefaultValue(metadata, type, context));
         }
         else
         {
             return(this.DoGetValueFromString(metadata, attValue, type, context));
         }
     }
     catch (Exception ex)
     {
         throw XmlDataSerializerExceptionFactory.CreateCanNotGetParseValueTypeException(metadata, attValue, type, context, ex);
     }
 }
        public virtual void ToXml(object parent, PropertyDescriptor metadata, object entity, XmlTextWriter writer, XmlSerializerContext context)
        {
            try
            {
                if (entity != null)
                {
                    //verifico si existe una referencia circular
                    if (!context.Settings.UniqueSerializationForInstance && context.Stack.ExistInSequence(entity))
                    {
                        context.Stack.InstanciesSequence.Push(entity);
                        throw XmlDataSerializerExceptionFactory.CreateCircularReferenceException(parent, metadata, entity, context);
                    }
                    else
                    {
                        context.Stack.InstanciesSequence.Push(entity);
                    }

                    if (!this.MustExcludeSerializationProperty(parent, metadata, entity, context))
                    {
                        this.DoToXml(parent, metadata, entity, writer, context);
                    }
                }
                else
                {
                    //si es nulo verifico si se puede escribir valores nulos
                    if (context.Settings.WriteNullValues)
                    {
                        this.DoToNullValueXml(parent, metadata, writer, context);
                    }
                }
            }
            catch (Exception ex)
            {
                throw XmlDataSerializerExceptionFactory.CreateSerializationException(parent, metadata, entity, context, ex);
            }
            finally
            {
                if (entity != null)
                {
                    context.Stack.InstanciesSequence.Pop();
                }
            }
        }
Example #3
0
        public override object FromXml(object parent, PropertyDescriptor metadata, Type entityType, XmlReader reader, XmlSerializerContext context)
        {
            string elementName = reader.LocalName;

            if (this.MustExcludeElement(elementName, context) || !this.MustIncludeElement(elementName, context))
            {
                reader.Skip();
                return(null);
            }

            try
            {
                context.Stack.InstanciesSequence.Push(parent);
                return(this.DoFromXml(parent, metadata, entityType, reader, context));
            }
            catch (Exception ex)
            {
                throw XmlDataSerializerExceptionFactory.CreateDeserializationException(elementName, parent, metadata, entityType, context, ex);
            }
            finally
            {
                context.Stack.InstanciesSequence.Pop();
            }
        }
        public virtual object FromXml(object parent, PropertyDescriptor metadata, Type entityType, XmlReader reader, XmlSerializerContext context)
        {
            string elementName = reader.LocalName;

            if (this.MustExcludeElement(elementName, context) || !this.MustIncludeElement(elementName, context))
            {
                reader.Skip();
                return(null);
            }

            try
            {
                context.Stack.InstanciesSequence.Push(parent);

                //me fijo si esta referenciando a otro objeto
                long id = this.GetReferenceId(reader, context);
                if (id == 0)
                {
                    object output = this.DoFromXml(parent, metadata, entityType, reader, context);
                    return(output);
                }
                else
                {
                    reader.Skip();
                    return(this.GetInstanceByReferenceId(id, context));
                }
            }
            catch (Exception ex)
            {
                throw XmlDataSerializerExceptionFactory.CreateDeserializationException(elementName, parent, metadata, entityType, context, ex);
            }
            finally
            {
                context.Stack.InstanciesSequence.Pop();
            }
        }