Пример #1
0
 private XElement Save(XElement xml, GroupComposite comp)
 {
     foreach (IPBComposite pbComp in comp.Children)
     {
         if (pbComp is Comment)
         {
             xml.Add(new XComment(((Comment)pbComp).Text));
         }
         else
         {
             var newElement = new XElement(pbComp.GetType().Name);
             var rootAttr   =
                 (XmlRootAttribute)
                 pbComp.GetType().GetCustomAttributes(typeof(XmlRootAttribute), true).FirstOrDefault();
             if (rootAttr != null)
             {
                 newElement.Name = rootAttr.ElementName;
             }
             pbComp.OnProfileSave(newElement);
             List <PropertyInfo> piList = pbComp.GetType().GetProperties().
                                          Where(p => p.GetCustomAttributes(typeof(PbXmlAttributeAttribute), true).
                                                Any()).ToList();
             foreach (PropertyInfo pi in piList)
             {
                 List <PbXmlAttributeAttribute> pList =
                     ((PbXmlAttributeAttribute[])pi.GetCustomAttributes(typeof(PbXmlAttributeAttribute), true))
                     .ToList();
                 string name              = pList.Any(a => a.AttributeName == null) ? pi.Name : pList[0].AttributeName;
                 string value             = "";
                 var    typeConverterAttr =
                     (TypeConverterAttribute)
                     pi.GetCustomAttributes(typeof(TypeConverterAttribute), true).FirstOrDefault();
                 if (typeConverterAttr != null)
                 {
                     try
                     {
                         var typeConverter =
                             (TypeConverter)
                             Activator.CreateInstance(Type.GetType(typeConverterAttr.ConverterTypeName));
                         if (typeConverter.CanConvertTo(typeof(string)))
                         {
                             value = (string)typeConverter.ConvertTo(pi.GetValue(pbComp, null), typeof(string));
                         }
                         else
                         {
                             Professionbuddy.Err("The TypeConvert {0} can not convert to string.",
                                                 typeConverterAttr.ConverterTypeName);
                         }
                     }
                     catch (Exception ex)
                     {
                         Professionbuddy.Err("Type conversion for {0}->{1} has failed.\n{2}", comp.GetType().Name,
                                             pi.Name, ex);
                     }
                 }
                 else
                 {
                     value = pi.GetValue(pbComp, null).ToString();
                 }
                 newElement.Add(new XAttribute(name, value));
             }
             if (pbComp is GroupComposite)
             {
                 Save(newElement, (GroupComposite)pbComp);
             }
             xml.Add(newElement);
         }
     }
     return(xml);
 }
Пример #2
0
 private XElement Save(XElement xml, GroupComposite comp)
 {
     foreach (IPBComposite pbComp in comp.Children)
     {
         if (pbComp is Comment)
         {
             xml.Add(new XComment(((Comment) pbComp).Text));
         }
         else
         {
             var newElement = new XElement(pbComp.GetType().Name);
             var rootAttr =
                 (XmlRootAttribute)
                 pbComp.GetType().GetCustomAttributes(typeof (XmlRootAttribute), true).FirstOrDefault();
             if (rootAttr != null)
                 newElement.Name = rootAttr.ElementName;
             pbComp.OnProfileSave(newElement);
             List<PropertyInfo> piList = pbComp.GetType().GetProperties().
                 Where(p => p.GetCustomAttributes(typeof (PbXmlAttributeAttribute), true).
                                Any()).ToList();
             foreach (PropertyInfo pi in piList)
             {
                 List<PbXmlAttributeAttribute> pList =
                     ((PbXmlAttributeAttribute[]) pi.GetCustomAttributes(typeof (PbXmlAttributeAttribute), true))
                         .ToList();
                 string name = pList.Any(a => a.AttributeName == null) ? pi.Name : pList[0].AttributeName;
                 string value = "";
                 var typeConverterAttr =
                     (TypeConverterAttribute)
                     pi.GetCustomAttributes(typeof (TypeConverterAttribute), true).FirstOrDefault();
                 if (typeConverterAttr != null)
                 {
                     try
                     {
                         var typeConverter =
                             (TypeConverter)
                             Activator.CreateInstance(Type.GetType(typeConverterAttr.ConverterTypeName));
                         if (typeConverter.CanConvertTo(typeof (string)))
                         {
                             value = (string)typeConverter.ConvertTo(null, CultureInfo.InvariantCulture, pi.GetValue(pbComp, null), typeof(string));
                         }
                         else
                             Professionbuddy.Err("The TypeConvert {0} can not convert to string.",
                                                 typeConverterAttr.ConverterTypeName);
                     }
                     catch (Exception ex)
                     {
                         Professionbuddy.Err("Type conversion for {0}->{1} has failed.\n{2}", comp.GetType().Name,
                                             pi.Name, ex);
                     }
                 }
                 else
                 {
                     value = Convert.ToString(pi.GetValue(pbComp, null), CultureInfo.InvariantCulture);
                 }
                 newElement.Add(new XAttribute(name, value));
             }
             if (pbComp is GroupComposite)
                 Save(newElement, (GroupComposite) pbComp);
             xml.Add(newElement);
         }
     }
     return xml;
 }