private Object CreateResponseContentExample(DtoDocumentationMetadata dtoDocumentationMetadata)
{
// Create an example DTO based off AutoFixture / ObjectHydrator conventions to be used as reference if properties aren't documented.
var exampleObject = CreateInstanceOfType(dtoDocumentationMetadata.Type);
IDictionary<String, Object> responseExample = new ExpandoObject();
var propertyDescriptors = TypeDescriptor.GetProperties(dtoDocumentationMetadata.Type);
var dtoProperties =
dtoDocumentationMetadata.Type
.GetProperties(BindingFlags.Instance | BindingFlags.Public)
.Where(pi => pi.GetCustomAttributes(true)
.All(
attribute =>
!(attribute is NonSerializedAttribute) &&
!(attribute is IgnoreDataMemberAttribute)))
.Select(pi => propertyDescriptors[pi.Name]);
foreach (var propertyDescriptor in dtoProperties)
{
if (!TypeHelper.CanConvertFromString(propertyDescriptor.PropertyType) &&
_WebApiDocumentationMetadata.DtoDocumentation.ContainsKey(propertyDescriptor.PropertyType))
{
responseExample[propertyDescriptor.Name] =
CreateResponseContentExample(_WebApiDocumentationMetadata.DtoDocumentation[propertyDescriptor.PropertyType]);
}
else
{
responseExample[propertyDescriptor.Name] = propertyDescriptor.GetValue(exampleObject);
}
}
return responseExample;
}