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)); }
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); }
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); }
public void UnregisterNameBasedElementHandler(INameBasedHandler nameBasedElementHandler, String elementName) { NameBasedHandlerExtendable.UnregisterNameBasedElementHandler(nameBasedElementHandler, elementName); }
public virtual void UnregisterNameBasedElementHandler(INameBasedHandler nameBasedElementHandler, String elementName) { nameBasedElementReaders.Unregister(nameBasedElementHandler, elementName); nameBasedElementWriters.Remove(nameBasedElementHandler); }
public void UnregisterNameBasedElementHandler(INameBasedHandler nameBasedElementHandler, String elementName) { nameToElementHandlers.Unregister(nameBasedElementHandler, elementName); }