Beispiel #1
0
        public static Dictionary <string, ReflectedValueInfo> GetPropertiesAndValuesForObject(object valueObject)
        {
            var publicProps = new Dictionary <string, ReflectedValueInfo>();

            var t = valueObject.GetType();

            var bindingFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly;

            var props = t.GetProperties(bindingFlags);

            foreach (var prop in props)
            {
                var valueInfo = new ReflectedValueInfo()
                {
                    IsNullableType = prop.PropertyType.IsGenericType && prop.PropertyType.GetGenericTypeDefinition() == typeof(Nullable <>),
                    IsPrivate      = prop.PropertyType.IsPublic,
                    Name           = prop.Name,
                    Value          = prop.GetValue(valueObject)
                };

                // Override strings to be a nullable type
                if (prop.PropertyType == typeof(string))
                {
                    valueInfo.IsNullableType = true;
                    valueInfo.ValueType      = typeof(string);
                }
                else if (valueInfo.IsNullableType)
                {
                    // If the value type is nullable, get its underlying type
                    valueInfo.ValueType = prop.PropertyType.GetGenericArguments()[0];
                }
                else
                {
                    valueInfo.ValueType = prop.PropertyType;
                }

                if (valueInfo.Value == null)
                {
                    valueInfo.IsNull = true;
                }

                publicProps.Add(valueInfo.Name, valueInfo);
            }

            return(publicProps);
        }
Beispiel #2
0
 /// <summary>
 /// Adds a parameter to the given parameter collection, serialising to the types respective DB type, performing serialisation as needed
 /// </summary>
 /// <param name="paramName"></param>
 /// <param name="reflectedValueInfo"></param>
 /// <param name="queryParameters"></param>
 private void AddValueToQueryParameters(string paramName, ReflectedValueInfo reflectedValueInfo, SQLiteParameterCollection queryParameters)
 {
     if (reflectedValueInfo.IsNull == true)
     {
         queryParameters.AddWithValue(paramName, DBNull.Value);
     }
     else if (reflectedValueInfo.ValueType == typeof(DateTime))
     {
         queryParameters.AddWithValue(paramName, DateTimeToISO8601String((DateTime)reflectedValueInfo.Value));
     }
     else if (reflectedValueInfo.ValueType == typeof(DateTimeOffset))
     {
         queryParameters.AddWithValue(paramName, DateTimeOffsetToString((DateTimeOffset)reflectedValueInfo.Value));
     }
     else if (reflectedValueInfo.ValueType == typeof(decimal))
     {
         queryParameters.AddWithValue(paramName, ValueToLosslessDecimal((decimal)reflectedValueInfo.Value));
     }
     else if (reflectedValueInfo.ValueType == typeof(TimeSpan))
     {
         queryParameters.AddWithValue(paramName, TimeSpanToString((TimeSpan)reflectedValueInfo.Value));
     }
     else if (reflectedValueInfo.ValueType == typeof(Guid))
     {
         queryParameters.AddWithValue(paramName, reflectedValueInfo.Value.ToString());
     }
     else if (reflectedValueInfo.ValueType == typeof(uint))
     {
         var byteValue = BitConverter.GetBytes((uint)reflectedValueInfo.Value);
         queryParameters.AddWithValue(paramName, byteValue);
     }
     else if (reflectedValueInfo.ValueType == typeof(ulong))
     {
         var byteValue = BitConverter.GetBytes((ulong)reflectedValueInfo.Value);
         queryParameters.AddWithValue(paramName, byteValue);
     }
     else if (reflectedValueInfo.ValueType == typeof(char))
     {
         // Chars are stored as a byte pair BLOB to reduce string conversions
         queryParameters.AddWithValue(paramName, BitConverter.GetBytes((char)reflectedValueInfo.Value));
     }
     else
     {
         queryParameters.AddWithValue(paramName, reflectedValueInfo.Value);
     }
 }