private void ObjectReferenceElementReconstruction(object obj) { var props = TypeDescriptor.GetProperties(obj); foreach (PropertyDescriptor p in props) { object src = p.GetValue(obj); if (p.PropertyType == typeof(ReferenceElement)) { ReferenceElement re = (ReferenceElement)src; if ((re != null) && (re.Element == null)) { re.Element = GetObject(re); //p.SetValue(obj, re); } } //else if (p.PropertyType is IList) else if (src is IList) { foreach (object elem in (src as IList)) { var t = elem.GetType(); if (t.IsClass) { if (elem is ReferenceElement) { ReferenceElement re = (ReferenceElement)elem; if ((re != null) && (re.Element == null)) { re.Element = GetObject(re); //p.SetValue(obj, re); } } else { ObjectReferenceElementReconstruction(elem); } } } } else if (p.PropertyType.IsClass) { ObjectReferenceElementReconstruction(src); } } }
/// <summary> /// Gets the Open element object from the Reference element /// </summary> /// <param name="element">Reference element</param> /// <returns>The instance of OpenElementId object</returns> public OpenElementId GetObject(ReferenceElement element) { if (element.Element != null) { return(element.Element); } IList obj; if (!GetData().TryGetValue(element.TypeName, out obj)) { return(null); } //var lst = obj as List<OpenElementId>; var lst = ((IEnumerable)obj).Cast <OpenElementId>(); return(lst.OfType <OpenElementId>().FirstOrDefault(it => it.Id == element.Id)); }