private SchemaPropertyEntry GenerateForProperty(PropertyMapping propertyInfo) { var propType = propertyInfo.PropertyType; var propEntry = new SchemaPropertyEntry { Required = propertyInfo.IsRequiredForConstructor, Access = propertyInfo.AccessMode, Name = propertyInfo.Name, Type = propType.GetSchemaTypeName() }; var enumerablePropType = propType as EnumerableTypeSpec; if (enumerablePropType != null) { propEntry.Items = new List<SchemaArrayItem> { new SchemaArrayItem { Type = enumerablePropType.ItemType.GetSchemaTypeName(), Access = propertyInfo.ItemAccessMode } }; } var dictPropType = propType as DictionaryTypeSpec; if (dictPropType != null && propEntry.Type == "dictionary") { propEntry.Items = new List<SchemaArrayItem>() { new SchemaArrayItem() { Type = dictPropType.ValueType.GetSchemaTypeName(), Access = propertyInfo.ItemAccessMode } }; } return propEntry; }
private TypeReference GetPropertyTypeReference(PropertyMapping prop) { TypeReference propTypeRef; if (prop.ExposedAsRepository) { var propType = prop.PropertyType as EnumerableTypeSpec; if (propType == null) throw new InvalidOperationException("Can only expose an enumerable type as repository."); var resourceInfo = this.clientTypeInfoDict[propType.ItemType]; return resourceInfo.CustomRepositoryInterface; } else propTypeRef = GetTypeReference(prop.PropertyType); return propTypeRef; }
public abstract ExportedPropertyDetails LoadExportedPropertyDetails(PropertyMapping propertyMapping);