internal ResourceTypeAttribute(IAttributeValueConverter attributeValueConverter, PropertyInfo property, string jsonKey) : base(property, jsonKey) { _attributeValueConverter = attributeValueConverter; }
private static object TransformDbfValue(DbfFieldInfo field, string fieldValue, IAttributeValueConverter valueConverter) { switch (field.NativeDbfType) { // Currency case 'Y': // Numeric case 'N': // Float case 'F': // Double case 'B': // NOTE: numeric overflow is physically stored as asterisks in the DBF file. fieldValue = fieldValue.TrimStart(' ', '*'); break; // Integer case 'I': // TODO: Handle integer overflow // NOTE: Integer fields cannot handle overflow as asterisks in DBF file because they are stored in binary format. // Overflow in integer field is represented by the lowest integer value -2**32. fieldValue = fieldValue.TrimStart(' '); break; // Date case 'D': if (string.IsNullOrEmpty(fieldValue.TrimEnd(' '))) { fieldValue = DateTime.MinValue.ToString(CultureInfo.InvariantCulture); } else { fieldValue = fieldValue.Substring(0, 4) + "-" + fieldValue.Substring(4, 2) + "-" + fieldValue.Substring(6, 2); } break; // DateTime case 'T': fieldValue = fieldValue.Substring(0, 4) + "-" + fieldValue.Substring(4, 2) + "-" + fieldValue.Substring(6, 2) + " " + fieldValue.Substring(8, 2) + ":" + fieldValue.Substring(10, 2) + ":" + fieldValue.Substring(12, 2); break; case 'L': if (fieldValue.ToUpper() == "T" || fieldValue.ToUpper() == "Y") { fieldValue = bool.TrueString; } else { fieldValue = bool.FalseString; } break; default: fieldValue = fieldValue.TrimEnd(' '); break; } object result = null; if (!string.IsNullOrEmpty(fieldValue)) { result = Convert.ChangeType(fieldValue, field.MappedType, CultureInfo.InvariantCulture); } // NOTE: Optionally allow the user to customize the field value / field value type. if (valueConverter != null) { result = valueConverter.Convert(result, field.Name, field.MappedType); } return(result); }
public static void AddValueConverter(this IPocoDynamo db, Type type, IAttributeValueConverter valueConverter) { DynamoMetadata.Converters.ValueConverters[type] = valueConverter; }