internal override void StoreValue(Element element, object serialized, object source, TypeCache typeCache, Cache cache) { Node.Node node = element.EvalSingle(Query) as Node.Node; string value = (string) serialized; if (node == null && value != null && !String.IsNullOrEmpty(CreateQuery)) { element.Eval(CreateQuery); node = element.EvalSingle(Query) as Node.Node; } else if (node != null && value == null) { node.Remove(); return; } if (node != null) { node.Value = value; } }
internal override object FetchValue(Element element, object target, TypeCache typeCache, Cache cache) { object result = element.EvalSingle(Query); if (result == null) return null; Node.Node node = result as Node.Node; return GetObjectFromString( node != null ? node.Value : result.ToString(), Default, target, typeCache.Type, _typeConverter); }
private object FetchValue(Element item, string attributeName, string elementName, string query, bool arePersistentObjects, bool attach, TypeCache typeCache, TypeConverter typeConverter, Cache cache) { object value = null; if (!String.IsNullOrEmpty(attributeName)) { Node.Attribute attribute = item.Attribute(attributeName); value = attribute == null ? null : GetObjectFromString(attribute.Value, null, null, typeCache.Type, typeConverter); } else { object result = !String.IsNullOrEmpty(query) ? item.EvalSingle(query) : item.Children.OfType<Element>().FirstOrDefault(e => e.Name.Equals(elementName)); if (arePersistentObjects) { // Get, attach, and fetch the persistent object instance Element element = result as Element; if (element == null) throw new Exception("Persistent value node must be an element."); value = cache.GetObject(typeCache, element, attach); } else { Node.Node itemNode = result as Node.Node; value = GetObjectFromString(itemNode != null ? itemNode.Value : result == null ? null : result.ToString(), null, null, typeCache.Type, typeConverter); } } return value; }