private ResourceType GetOrCreateContentField(ContentField contentField) { var contentFieldName = contentField.Name; if (this._resourceTypes.ContainsKey(contentFieldName)) { return(this._resourceTypes[contentFieldName]); } var contentFieldType = contentField.GetType(); var resourceTypeContentField = new ResourceType( contentFieldType, ResourceTypeKind.ComplexType, null, (this as IDataServiceMetadataProvider).ContainerNamespace, contentFieldName, false); resourceTypeContentField.CanReflectOnInstanceType = false; resourceTypeContentField.AddResourcePropertiesFromInstanceType(contentFieldType); contentFieldType .GetProperties() .Where(property => property.PropertyType.IsGenericType && property.PropertyType.GetGenericTypeDefinition() == typeof(IEnumerable <>)) .ToList() .ForEach(property => { var orchardType = property.PropertyType.GenericTypeArguments.Single(); if (orchardType.BaseType.IsGenericType && orchardType.BaseType.GetGenericTypeDefinition() == typeof(ContentPart <>)) { var resourceType = this.GetOrCreateContentPart(orchardType, orchardType.Name); resourceType.CustomState = property; resourceTypeContentField.AddResourcePropertyFromInstanceCollectionResourceType(resourceType); } }); this._resourceTypes[contentFieldName] = resourceTypeContentField; return(resourceTypeContentField); }