private XElement ToXml(object obj, PropertyInfo pInfo) { if (pInfo == null) { return(null); } object[] atts = pInfo.GetCustomAttributes(typeof(XmlPersistAttribute), false); if (atts == null || atts.Length == 0) { return(ValueTypePropertyToXml(obj, pInfo)); } XmlPersistAttribute xlmPersistAtt = atts[0] as XmlPersistAttribute; IPropertyConverter convter = null; try { convter = Activator.CreateInstance(xlmPersistAtt.PropertyConverter) as IPropertyConverter; object propertyValue = obj.GetType().InvokeMember(pInfo.Name, BindingFlags.GetProperty, null, obj, null); if (propertyValue != null) { return(convter.ToXml(pInfo.Name, propertyValue)); } return(null); } catch (Exception ex) { Console.WriteLine(ex.Message); return(null); } }
private XElement ToXml(object obj, PropertyInfo pInfo) { if (pInfo == null) { return(null); } object[] atts = pInfo.GetCustomAttributes(typeof(GeoDo.Core.XmlPersistAttribute), true); if (atts == null || atts.Length == 0) { return(ValueTypePropertyToXml(obj, pInfo)); } GeoDo.Core.XmlPersistAttribute xmlPersistAtt = atts[0] as GeoDo.Core.XmlPersistAttribute; if (!xmlPersistAtt.IsNeedPersisted) { return(null); } IPropertyConverter convter = null; try { object propertyValue = obj.GetType().InvokeMember(pInfo.Name, BindingFlags.GetProperty, null, obj, null); if (propertyValue != null) { if (xmlPersistAtt.PropertyConverter != null) { convter = Activator.CreateInstance(xmlPersistAtt.PropertyConverter) as IPropertyConverter; } if (pInfo.PropertyType.IsArray) { XElement containerXml = new XElement(pInfo.Name); Array array = propertyValue as Array; GenerateCollectionItemXElement(pInfo, array as IList, convter, xmlPersistAtt, containerXml); return(containerXml); } else if (PropertyIsList(pInfo)) { XElement containerXml = new XElement(pInfo.Name); IList lst = propertyValue as IList; GenerateCollectionItemXElement(pInfo, lst, convter, xmlPersistAtt, containerXml); return(containerXml); } else { return(convter.ToXml(pInfo.Name, propertyValue)); } } return(null); } catch (Exception ex) { Console.WriteLine(ex.Message); return(null); } }
private void GenerateCollectionItemXElement(PropertyInfo pInfo, IList items, IPropertyConverter convter, XmlPersistAttribute persistAtt, XElement containerXml) { foreach (object it in items) { XElement ele = null; if (convter != null) { ele = convter.ToXml(persistAtt.CollectionItemName, it); } else { ele = ToXml(it); } if (ele != null) { containerXml.Add(ele); } } }