public static ModelReadTemplate GetDefault(Type type, ModelReadType defaultConversion = ModelReadType.SafeConvert, bool useCache = true) { ModelReadTemplate result; if (!defaultTemplates.ContainsKey(type) || !useCache) { result = new ModelReadTemplate(); foreach (PropertyInfo property in type.GetProperties(BindingFlags.Public | BindingFlags.Instance)) { var x = property.Name; if (BaseModel.IsBindable(property)) { var mrti = new ModelReadTemplateItem { Source = x, Target = x, Conversion = defaultConversion }; result.Items.Add(mrti); } else { if (property.PropertyType.DescendsFrom(typeof(BaseModel))) { var propertyTemplate = GetDefault(property.PropertyType, defaultConversion, useCache); foreach (var item in propertyTemplate.Items) { var mrti = new ModelReadTemplateItem { Source = x + "." + item.Source, Target = x + "." + item.Target, Conversion = defaultConversion }; result.Items.Add(mrti); } } } } defaultTemplates.TryAdd(type, result); } else { result = defaultTemplates[type]; } return(result); }
public ModelReadTemplateItem Clone() { var result = new ModelReadTemplateItem { Source = this.Source, Target = this.Target, DefaultValue = this.DefaultValue, Conversion = this.Conversion, Ignore = this.Ignore, ThrowOnMissingProperty = this.ThrowOnMissingProperty, ThrowOnMissingValue = this.ThrowOnMissingValue, ThrowIfNotBindable = this.ThrowIfNotBindable, SourceComparison = this.SourceComparison, TargetIgnoreCase = this.TargetIgnoreCase }; foreach (var item in this.Args) { result.Args.Add(item.Key, item.Value); } return(result); }