/// <summary> /// Initializes a new instance of the <see cref="ModelMetadata"/> class. /// </summary> /// <param name="provider">The provider.</param> /// <param name="containerType">The type of the container.</param> /// <param name="modelAccessor">The model accessor.</param> /// <param name="modelType">The type of the model.</param> /// <param name="propertyName">The name of the property.</param> public ModelMetadata(ModelMetadataProvider provider, Type containerType, Func<object> modelAccessor, Type modelType, string propertyName) { if (provider == null) { throw Error.ArgumentNull("provider"); } if (modelType == null) { throw Error.ArgumentNull("modelType"); } this.Provider = provider; this.containerType = containerType; this.modelAccessor = modelAccessor; this.modelType = modelType; this.propertyName = propertyName; }
/// <summary> /// Initializes a new instance of the <see cref="ModelMetadata"/> class. /// </summary> /// <param name="provider">The provider.</param> /// <param name="containerType">The type of the container.</param> /// <param name="modelAccessor">The model accessor.</param> /// <param name="modelType">The type of the model.</param> /// <param name="propertyName">The name of the property.</param> public ModelMetadata(ModelMetadataProvider provider, Type containerType, Func <object> modelAccessor, Type modelType, string propertyName) { if (provider == null) { throw Error.ArgumentNull("provider"); } if (modelType == null) { throw Error.ArgumentNull("modelType"); } this.Provider = provider; this.containerType = containerType; this.modelAccessor = modelAccessor; this.modelType = modelType; this.propertyName = propertyName; }
/// <summary> /// Flatten the <paramref name="model"/>. /// Properties are stored into a dictionary. /// Property name is used as key. Properties in a submodel are separated with a period. /// <see cref="Enumerable"/> properties are keyed with square brackets. /// </summary> /// <example> /// <list type="bullet"> /// <item>Property1</item> /// <item>Property2</item> /// <item>Property3.SubProperty1</item> /// <item>Property3.SubProperty2</item> /// <item>Property4[0].Item</item> /// <item>Property4[1].Item</item> /// <item>...</item> /// </list> /// </example> /// <param name="model">The model to be flattened.</param> /// <param name="type">The <see cref="Type"/> to use for flattening.</param> /// <param name="metadataProvider">The <see cref="ModelMetadataProvider"/> used to provide the model metadata.</param> /// <param name="keyPrefix">The <see cref="string"/> to append to the key for any validation errors.</param> /// <returns>The <see cref="ModelDictionary"/>.</returns> public ModelDictionary Flatten(object model, Type type, ModelMetadataProvider metadataProvider, string keyPrefix) { if (type == null) { throw Error.ArgumentNull("type"); } if (metadataProvider == null) { throw Error.ArgumentNull("metadataProvider"); } ModelMetadata metadata = metadataProvider.GetMetadataForType(() => model, type); VisitContext visitContext = new VisitContext { MetadataProvider = metadataProvider, RootPrefix = keyPrefix }; this.VisitNodeAndChildren(metadata, visitContext); return visitContext.FlatCommand; }
/// <summary> /// Flatten the <paramref name="model"/>. /// Properties are stored into a dictionary. /// Property name is used as key. Properties in a submodel are separated with a period. /// <see cref="Enumerable"/> properties are keyed with square brackets. /// </summary> /// <example> /// <list type="bullet"> /// <item>Property1</item> /// <item>Property2</item> /// <item>Property3.SubProperty1</item> /// <item>Property3.SubProperty2</item> /// <item>Property4[0].Item</item> /// <item>Property4[1].Item</item> /// <item>...</item> /// </list> /// </example> /// <param name="model">The model to be flattened.</param> /// <param name="type">The <see cref="Type"/> to use for flattening.</param> /// <param name="metadataProvider">The <see cref="ModelMetadataProvider"/> used to provide the model metadata.</param> /// <param name="keyPrefix">The <see cref="string"/> to append to the key for any validation errors.</param> /// <returns>The <see cref="ModelDictionary"/>.</returns> public ModelDictionary Flatten(object model, Type type, ModelMetadataProvider metadataProvider, string keyPrefix) { if (type == null) { throw Error.ArgumentNull("type"); } if (metadataProvider == null) { throw Error.ArgumentNull("metadataProvider"); } ModelMetadata metadata = metadataProvider.GetMetadataForType(() => model, type); VisitContext visitContext = new VisitContext { MetadataProvider = metadataProvider, RootPrefix = keyPrefix }; this.VisitNodeAndChildren(metadata, visitContext); return(visitContext.FlatCommand); }