protected virtual object GetRootObject(object obj, IPropertyMap parent) { object rootObject = this.Context.ObjectManager.GetPropertyValue(obj, parent.Name); if (rootObject == null) { throw new NPathException("Can't serialize reference to inlined object with null reference in parent path!"); // do not localize } IClassMap classMap = this.Context.DomainMap.MustGetClassMap(rootObject.GetType()); parent = classMap.GetDocParentPropertyMap(); if (parent != null) { rootObject = GetRootObject(rootObject, parent); } return(rootObject); }
protected virtual void SerializeInlineReferenceElement(object obj, XmlNode xmlElement, object value) { IObjectManager om = this.Context.ObjectManager; IDomainMap domainMap = this.Context.DomainMap; IClassMap classMap = domainMap.MustGetClassMap(value.GetType()); SetAttributeValue(xmlElement, "id", om.GetObjectIdentity(value)); SetAttributeValue(xmlElement, "class", classMap.Name); IPropertyMap parent = classMap.GetDocParentPropertyMap(); if (parent != null) { object rootObject = GetRootObject(value, parent); if (rootObject == null) { throw new NPersistException("Could not find root object!"); // do not localize } SetAttributeValue(xmlElement, "root-id", om.GetObjectIdentity(rootObject)); SetAttributeValue(xmlElement, "root-class", domainMap.MustGetClassMap(rootObject.GetType()).Name); } }