示例#1
0
        private object GetValueToSet(string propertyName, string value, TrackedInstance instance, ref Type memberType)
        {
            object valueToSet = null;

            if (value == null && (IsNullableType(memberType) || !memberType.IsValueType))
            {
                // keep it null
                valueToSet = null;
            }
            else
            {
                memberType = ExtractNullableUnderlyingType(memberType);
                var typeCode = GetCodeForType(memberType);
                if (typeCode != TypeCode.Empty)
                {
                    valueToSet = ConvertType(propertyName, value, typeCode, instance, memberType);
                }
                else
                {
                    if (memberType.IsEnum)
                    {
                        valueToSet = SetEnumPropertyValue(propertyName, value, memberType, instance);
                    }
                    else
                    {
                        throw new NoKnownWayToParseToTypeException(memberType);
                    }
                }
            }

            return(valueToSet);
        }
示例#2
0
        public Guid AddObject(object obj, string name, Guid?parentId)
        {
            var instance = new TrackedInstance(obj)
            {
                Name     = name,
                ParentId = parentId
            };

            _objects.TryAdd(instance.Id, instance);
            return(instance.Id);
        }
示例#3
0
        private static void GetMemberInfo(string propertyName, TrackedInstance instance, out PropertyInfo property, out FieldInfo field)
        {
            property = null;
            field    = null;
            var rawObjectType = instance.RawObject.GetType();

            property = rawObjectType
                       .GetProperties()
                       .Where(x => x.Name.Equals(propertyName, StringComparison.OrdinalIgnoreCase))
                       .SingleOrDefault();

            if (property == null)
            {
                field = rawObjectType.GetFields().Where(x => x.Name.Equals(propertyName, StringComparison.OrdinalIgnoreCase)).SingleOrDefault();
            }
        }
示例#4
0
        private static object ConvertType(string propertyName,
                                          string value,
                                          TypeCode typeCode,
                                          TrackedInstance instance,
                                          Type propertyType)
        {
            object convertedValue;

            try
            {
                convertedValue = Convert.ChangeType(value, typeCode);
            }
            catch
            {
                throw new InvalidPropertyValueConversionException(instance.RawObject.GetType(), propertyName, propertyType, value);
            }

            return(convertedValue);
        }
示例#5
0
        private static Type GetMemberType(string propertyName, TrackedInstance instance, PropertyInfo property, FieldInfo field)
        {
            Type memberType;

            if (property == null && field == null)
            {
                throw new PropertyDoesntExistException(instance.RawObject.GetType(), propertyName);
            }
            else if (property != null)
            {
                memberType = property.PropertyType;
            }
            else // if field != null
            {
                memberType = field.FieldType;
            }

            return(memberType);
        }
示例#6
0
 private object SetEnumPropertyValue(string propertyName, string value, Type propertyType, TrackedInstance instance)
 {
     if (propertyType.IsEnumDefined(value))
     {
         var parsedValue = Enum.Parse(propertyType, value);
         return(parsedValue);
     }
     else
     {
         throw new InvalidPropertyValueConversionException(instance.RawObject.GetType(), propertyName, propertyType, value);
     }
 }