Example #1
0
        public Object ReadObject(Type returnType, IReader reader)
        {
            String            elementName      = reader.GetElementName();
            INameBasedHandler nameBasedHandler = nameToElementHandlers.GetExtension(elementName);

            if (nameBasedHandler == null)
            {
                throw new ArgumentException("Could not read object: " + elementName);
            }
            return(nameBasedHandler.ReadObject(returnType, elementName, 0, reader));
        }
Example #2
0
        public virtual Object ReadObject(Type returnType, IReader reader)
        {
            String elementName = reader.GetElementName();

            if (XmlDictionary.NullElement.Equals(elementName))
            {
                reader.MoveOverElementEnd();
                return(null);
            }
            String idValue = reader.GetAttributeValue(XmlDictionary.IdAttribute);
            int    id      = idValue != null && idValue.Length > 0 ? Int32.Parse(idValue) : 0;

            if (XmlDictionary.RefElement.Equals(elementName))
            {
                reader.MoveOverElementEnd();
                return(reader.GetObjectById(id));
            }
            Object obj;

            if (XmlDictionary.ObjectElement.Equals(elementName))
            {
                Type type = ClassElementHandler.ReadFromAttribute(reader);
                obj = ReadObjectContent(returnType, type, id, reader);
            }
            else
            {
                INameBasedHandler nameBasedElementReader = nameBasedElementReaders.GetExtension(elementName);
                if (nameBasedElementReader == null)
                {
                    throw new Exception("Element name '" + elementName + "' not supported");
                }
                obj = nameBasedElementReader.ReadObject(returnType, elementName, id, reader);
            }
            if (id > 0)
            {
                reader.PutObjectWithId(obj, id);
            }
            reader.MoveOverElementEnd();
            return(obj);
        }
Example #3
0
        public virtual void WriteObject(Object obj, IWriter writer)
        {
            if (obj == null)
            {
                writer.WriteStartElement(XmlDictionary.NullElement);
                writer.WriteEndElement();
                return;
            }
            int id = writer.GetIdOfObject(obj);

            if (id > 0)
            {
                writer.WriteStartElement(XmlDictionary.RefElement);
                writer.WriteAttribute(XmlDictionary.IdAttribute, id.ToString());
                writer.WriteEndElement();
                return;
            }
            Type type = ProxyHelper.GetRealType(obj.GetType());

            for (int a = 0, size = nameBasedElementWriters.Count; a < size; a++)
            {
                INameBasedHandler nameBasedElementWriter = nameBasedElementWriters[a];
                if (nameBasedElementWriter.WritesCustom(obj, type, writer))
                {
                    return;
                }
            }

            id = writer.AcquireIdForObject(obj);
            String objectElement = XmlDictionary.ObjectElement;

            writer.WriteStartElement(objectElement);
            if (id > 0)
            {
                writer.WriteAttribute(XmlDictionary.IdAttribute, id.ToString());
            }
            ClassElementHandler.WriteAsAttribute(type, writer);
            WriteObjectContent(obj, type, writer);
            writer.WriteCloseElement(objectElement);
        }
Example #4
0
 public void UnregisterNameBasedElementHandler(INameBasedHandler nameBasedElementHandler, String elementName)
 {
     NameBasedHandlerExtendable.UnregisterNameBasedElementHandler(nameBasedElementHandler, elementName);
 }
Example #5
0
 public virtual void UnregisterNameBasedElementHandler(INameBasedHandler nameBasedElementHandler, String elementName)
 {
     nameBasedElementReaders.Unregister(nameBasedElementHandler, elementName);
     nameBasedElementWriters.Remove(nameBasedElementHandler);
 }
Example #6
0
 public void UnregisterNameBasedElementHandler(INameBasedHandler nameBasedElementHandler, String elementName)
 {
     nameToElementHandlers.Unregister(nameBasedElementHandler, elementName);
 }