private void WriteRepoItemProperties(XmlTextWriter xml, RepositoryItemBase ri) { // Get the properties - need to be ordered so compare/isDirty can work faster var properties = ri.GetType().GetMembers().Where(x => x.MemberType == MemberTypes.Property).OrderBy(x => x.Name); foreach (MemberInfo mi in properties) { dynamic v = null; IsSerializedForLocalRepositoryAttribute token = Attribute.GetCustomAttribute(mi, typeof(IsSerializedForLocalRepositoryAttribute), false) as IsSerializedForLocalRepositoryAttribute; if (token == null) { continue; } //Get tha attr value v = ri.GetType().GetProperty(mi.Name).GetValue(ri); // Enum might be unknow = not set - so no need to write to xml, like null for object if (ri.GetType().GetProperty(mi.Name).PropertyType.IsEnum) { string vs = v.ToString(); // No need to write enum unknown = null if (vs != "Unknown") { xmlwriteatrr(xml, mi.Name, vs); } } else { if (v != null) { xmlwriteatrr(xml, mi.Name, v.ToString()); } } } }
private void WriteRepoItemFields(XmlTextWriter xml, RepositoryItemBase ri) { var Fields = ri.GetType().GetMembers().Where(x => x.MemberType == MemberTypes.Field).OrderBy(x => x.Name); foreach (MemberInfo fi in Fields) { dynamic v = null; IsSerializedForLocalRepositoryAttribute token = Attribute.GetCustomAttribute(fi, typeof(IsSerializedForLocalRepositoryAttribute), false) as IsSerializedForLocalRepositoryAttribute; if (token == null) { continue; } if (FastLoad) { if (IsObseravbleListLazyLoad(fi.Name)) { bool b = ((IObservableList)(ri.GetType().GetField(fi.Name).GetValue(ri))).LazyLoad; if (b) { string s = ((IObservableList)(ri.GetType().GetField(fi.Name).GetValue(ri))).StringData; xml.WriteStartElement("Activities"); xml.WriteString(s); xml.WriteEndElement(); return; } } } v = ri.GetType().GetField(fi.Name).GetValue(ri); if (v != null) { if (v is IObservableList) { xmlwriteObservableList(xml, fi.Name, (IObservableList)v); } else { if (v is List <string> ) { xmlwriteStringList(xml, fi.Name, (List <string>)v); } else if (v is RepositoryItemBase) { xmlwriteSingleObjectField(xml, fi.Name, v); } else { xml.WriteComment(">>>>>>>>>>>>>>>>> Unknown Field type to serialize - " + fi.Name + " - " + v.ToString()); } } } } }