예제 #1
0
        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);
        }