Apistry.WebApiDocumentationProvider.CreateResponseContentExample C# (CSharp) Method

CreateResponseContentExample() private method

private CreateResponseContentExample ( DtoDocumentationMetadata dtoDocumentationMetadata ) : Object
dtoDocumentationMetadata Apistry.Dto.DtoDocumentationMetadata
return Object
        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;
        }