public static void WriteXmlDigest(ISupportDigest digest, XmlWriter writer, bool writeStartElement, bool writeEndElement) { bool changed = digest.HasChanged; if (changed) { if (writeStartElement) { writer.WriteStartElement(digest.GetType().Name); } object defaultObject = ReflectionHelpers.GetFieldOrProperty <object>(digest, "Default"); writer.WriteAttributeString("changed", changed.ToString()); foreach (string value in digest.DigestableProperties) { object cur = ReflectionHelpers.GetFieldOrProperty <object>(digest, value); if (cur != null) { if ((cur is ISupportDigest) && ReflectionHelpers.GetFieldOrProperty <object>(cur, "Default") != null) { ISupportDigest curDigest = cur as ISupportDigest; if (curDigest.HasChanged) { writer.WriteStartElement(value); WriteXmlDigest(cur as ISupportDigest, writer, false, true); } } else { object def = ReflectionHelpers.GetFieldOrProperty <object>(defaultObject, value); if (def != null) { string formatString = "{0}"; if (ReflectionHelpers.FieldOrPropertyHasAttribute <HexAttribute>(digest, value)) { formatString = "0x{0:X2}"; } WriteDigestEntry(writer, value, def, cur, formatString); } } } } if (writeEndElement) { writer.WriteEndElement(); } } }
public static void WriteXmlDigest( ISupportDigest digest, XmlWriter writer, bool writeStartElement, bool writeEndElement ) { bool changed = digest.HasChanged; if( changed ) { if( writeStartElement ) { writer.WriteStartElement( digest.GetType().Name ); } object defaultObject = ReflectionHelpers.GetFieldOrProperty<object>( digest, "Default" ); writer.WriteAttributeString( "changed", changed.ToString() ); foreach( string value in digest.DigestableProperties ) { object cur = ReflectionHelpers.GetFieldOrProperty<object>( digest, value ); if( cur != null ) { if( (cur is ISupportDigest) && ReflectionHelpers.GetFieldOrProperty<object>( cur, "Default" ) != null ) { ISupportDigest curDigest = cur as ISupportDigest; if( curDigest.HasChanged ) { writer.WriteStartElement( value ); WriteXmlDigest( cur as ISupportDigest, writer, false, true ); } } else { object def = ReflectionHelpers.GetFieldOrProperty<object>( defaultObject, value ); if( def != null ) { string formatString = "{0}"; if( ReflectionHelpers.FieldOrPropertyHasAttribute<HexAttribute>( digest, value ) ) { formatString = "0x{0:X2}"; } WriteDigestEntry( writer, value, def, cur, formatString ); } } } } if( writeEndElement ) { writer.WriteEndElement(); } } }