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);
        }
示例#3
0
 public static void AddValueConverter(this IPocoDynamo db, Type type, IAttributeValueConverter valueConverter)
 {
     DynamoMetadata.Converters.ValueConverters[type] = valueConverter;
 }
 internal ResourceTypeAttribute(IAttributeValueConverter attributeValueConverter, PropertyInfo property, string jsonKey)
     : base(property, jsonKey)
 {
     _attributeValueConverter = attributeValueConverter;
 }