public static bool SetFallbackValue(this object rec, string fn, ChoRecordFieldConfiguration fieldConfig, CultureInfo culture) { if (rec is ExpandoObject) { return(((IDictionary <string, object>)rec).SetFallbackValue(fn, fieldConfig, culture)); } object fieldValue = null; //Set Fallback value to member bool FallbackValueExists = true; object FallbackValue = null; if (fieldConfig.IsFallbackValueSpecified) { FallbackValue = fieldConfig.FallbackValue; } else if (ChoType.HasFallbackValue(ChoTypeDescriptor.GetProperty(rec.GetType(), fn))) { FallbackValue = ChoType.GetRawFallbackValue(ChoTypeDescriptor.GetProperty(rec.GetType(), fn)); } else { FallbackValueExists = false; } if (FallbackValueExists) { if (fieldConfig.Converters.IsNullOrEmpty()) { fieldValue = ChoConvert.ConvertFrom(FallbackValue, ChoType.GetMemberInfo(rec.GetType(), fn), null, culture); } else { fieldValue = ChoConvert.ConvertFrom(FallbackValue, ChoType.GetMemberType(rec.GetType(), fn), null, fieldConfig.Converters.ToArray(), null, culture); } ChoType.SetMemberValue(rec, fn, fieldValue); } return(FallbackValueExists); }
protected virtual void LoadNCacheMembers(IEnumerable <ChoRecordFieldConfiguration> fcs) { if (!IsDynamicObject) { object defaultValue = null; object fallbackValue = null; foreach (var fc in fcs) { if (!PDDict.ContainsKey(fc.Name)) { continue; } fc.PD = PDDict[fc.Name]; fc.PI = PIDict[fc.Name]; //Load default value defaultValue = ChoType.GetRawDefaultValue(PDDict[fc.Name]); if (defaultValue != null) { fc.DefaultValue = defaultValue; fc.IsDefaultValueSpecified = true; } //Load fallback value fallbackValue = ChoType.GetRawFallbackValue(PDDict[fc.Name]); if (fallbackValue != null) { fc.FallbackValue = fallbackValue; fc.IsFallbackValueSpecified = true; } //Load Converters fc.PropConverters = ChoTypeDescriptor.GetTypeConverters(fc.PI); fc.PropConverterParams = ChoTypeDescriptor.GetTypeConverterParams(fc.PI); } PropertyNames = PDDict.Keys.ToArray(); } //Validators HasConfigValidators = (from fc in fcs where fc.Validators != null select fc).FirstOrDefault() != null; if (!HasConfigValidators) { if (!IsDynamicObject) { foreach (var fc in fcs) { if (!PDDict.ContainsKey(fc.Name)) { continue; } fc.Validators = ChoTypeDescriptor.GetPropetyAttributes <ValidationAttribute>(fc.PD).ToArray(); } } } ValDict = (from fc in fcs select new KeyValuePair <string, ValidationAttribute[]>(fc.Name, fc.Validators)).GroupBy(i => i.Key).Select(g => g.First()).ToDictionary(kvp => kvp.Key, kvp => kvp.Value); }
protected virtual void LoadNCacheMembers(IEnumerable <ChoRecordFieldConfiguration> fcs) { if (!IsDynamicObject) { string name = null; object defaultValue = null; object fallbackValue = null; foreach (var fc in fcs) { //if (fc is ChoFileRecordFieldConfiguration) // name = ((ChoFileRecordFieldConfiguration)fc).FieldName; //else name = fc.Name; fc.PD = PDDict.ContainsKey(name) ? PDDict[name] : (PDDict.Any(p => p.Value.Name == name) ? PDDict.Where(p => p.Value.Name == name).Select(p => p.Value).FirstOrDefault() : null); fc.PI = PIDict.ContainsKey(name) ? PIDict[name] : (PIDict.Any(p => p.Value.Name == name) ? PIDict.Where(p => p.Value.Name == name).Select(p => p.Value).FirstOrDefault() : null); if (fc.PD == null || fc.PI == null) { continue; } //Load default value defaultValue = ChoType.GetRawDefaultValue(fc.PD); if (defaultValue != null) { fc.DefaultValue = defaultValue; fc.IsDefaultValueSpecified = true; } //Load fallback value fallbackValue = ChoType.GetRawFallbackValue(fc.PD); if (fallbackValue != null) { fc.FallbackValue = fallbackValue; fc.IsFallbackValueSpecified = true; } //Load Converters fc.PropConverters = ChoTypeDescriptor.GetTypeConverters(fc.PI); fc.PropConverterParams = ChoTypeDescriptor.GetTypeConverterParams(fc.PI); //Load Custom Serializer fc.PropCustomSerializer = ChoTypeDescriptor.GetCustomSerializer(fc.PI); fc.PropCustomSerializerParams = ChoTypeDescriptor.GetCustomSerializerParams(fc.PI); if (fc.SourceType == null) { fc.SourceType = fc.GetSourceTypeFromConvertersIfAny(); } } PropertyNames = PDDict.Keys.ToArray(); } //Validators HasConfigValidators = (from fc in fcs where fc.Validators != null select fc).FirstOrDefault() != null; if (!HasConfigValidators) { if (!IsDynamicObject) { string name = null; foreach (var fc in fcs) { if (fc is ChoFileRecordFieldConfiguration) { name = ((ChoFileRecordFieldConfiguration)fc).FieldName; } else { name = fc.Name; } if (!PDDict.ContainsKey(name)) { continue; } fc.Validators = ChoTypeDescriptor.GetPropetyAttributes <ValidationAttribute>(fc.PD).ToArray(); } } } ValDict = (from fc in fcs select new KeyValuePair <string, ValidationAttribute[]>(fc is ChoFileRecordFieldConfiguration ? ((ChoFileRecordFieldConfiguration)fc).FieldName : fc.Name, fc.Validators)) .GroupBy(i => i.Key).Select(g => g.First()).ToDictionary(kvp => kvp.Key, kvp => kvp.Value); }