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); }
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; }