コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
 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);
         }
     }
 }