private void SerializeComplexValue (object value)
{
Assertion.DebugAssert (value != null, "should be handled by caller");
WriteTypeName(value);
_textWriter.WriteLine();
MemberInfo[] members = value.GetType().GetMembers (BindingFlags.Public | BindingFlags.Instance);
Array.Sort (members, (m1, m2) => m1.Name.CompareTo(m2.Name));
var memberValueSerializer = CreateIndentedSerializer();
foreach (var memberInfo in members)
{
object memberValue;
if (TryGetValue (value, memberInfo, out memberValue) && _memberFilter(memberInfo))
memberValueSerializer.Serialize (memberValue, memberInfo.Name);
}
}