private static void WriteUnifiedElement( UnifiedElement elem, StringBuilder buffer, int depth) { WriteTypeWithoutContent(elem, buffer, depth); // write items of enumerable var seq = elem as IEnumerable; if (seq != null) { foreach (var item in seq) { ToStringRecursively(item, buffer, depth + 1); } Debug.Assert( elem.GetType().GetProperties() .Where( prop => prop.Name.StartsWith("Unified") || prop.Name.StartsWith("IUnified")) .Where( prop => !IgnorePropertyNames.Contains(prop.Name)) .Where( prop => prop.GetIndexParameters().Length == 0) .Select(prop => prop.GetValue(elem, null)).Count () == 0); return; } // write properties without indexer var values = elem.GetType().GetProperties() .Where(prop => !IgnorePropertyNames.Contains(prop.Name)) .Where(prop => prop.GetIndexParameters().Length == 0) .Select(prop => prop.GetValue(elem, null)); foreach (var value in values) { ToStringRecursively(value, buffer, depth + 1); } }
private static void XmlWriteUnifiedElement( UnifiedElement elem, StringBuilder buffer, int depth) { // write items of enumerable var seq = elem as IEnumerable; if (seq != null) { foreach (var item in seq) { ToXmlRecursively(item, buffer, depth + 1); } } // write properties without indexer var values = elem.GetType().GetProperties() .Where(prop => !XmlIgnorePropertyNames.Contains(prop.Name)) .Where(prop => prop.GetIndexParameters().Length == 0) .Select(prop => prop.GetValue(elem, null)); foreach (var value in values) { ToXmlRecursively(value, buffer, depth + 1); } }
private static IEnumerable<UnifiedElement> GetProperties( UnifiedElement element) { var elements = element as IEnumerable<UnifiedElement>; if (elements != null) { foreach (var e in elements) { yield return e; } } var props = element.GetType().GetProperties() .Where(prop => prop.Name != "Parent") .Where(prop => prop.GetIndexParameters().Length == 0) .Where( prop => typeof(UnifiedElement).IsAssignableFrom( prop.PropertyType)); if (element is UnifiedWrapType) { props = props.Where(prop => prop.Name != "BasicTypeName"); } foreach (var prop in props) { yield return (UnifiedElement)prop.GetValue(element, null); } }