/// <summary> /// Initializes a new instance of the <see cref="InspectedProperty"/> class. /// </summary> /// <param name="type"> /// The inspected type. /// </param> /// <param name="fieldInfo"> /// The field info. /// </param> /// <exception cref="ArgumentNullException"> /// If <paramref name="type"/> is null. /// </exception> /// <exception cref="ArgumentNullException"> /// If <paramref name="fieldInfo"/> is null. /// </exception> /// <exception cref="ArgumentException"> /// If <paramref name="fieldInfo"/> 's declaring type has not been set. /// </exception> internal InspectedProperty(Type type, FieldInfo fieldInfo) { if (type == null) { throw new ArgumentNullException("type"); } if (fieldInfo == null) { throw new ArgumentNullException("fieldInfo"); } if (fieldInfo.DeclaringType == null) { throw new ArgumentException("fieldInfo declaring type has not been set"); } this.Name = fieldInfo.SerializableName(); this.InspectedType = type; this.PropertyType = fieldInfo.FieldType; this.IsNotNullableValueType = this.PropertyType.IsNotNullableValueType(); if (fieldInfo.DeclaringType != fieldInfo.ReflectedType) { fieldInfo = fieldInfo.DeclaringType.GetField(fieldInfo.Name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); } try { this.Getter = DelegateFactory.CreateGetter(fieldInfo); this.Setter = DelegateFactory.CreateSetter(fieldInfo); } catch (Exception exception) { Logging.TraceException(exception); } this.Member = fieldInfo; #if!HT4O_SERIALIZATION this.IdAttribute = fieldInfo.GetAttribute<IdAttribute>(); #endif this.IsTransient = fieldInfo.HasAttribute<TransientAttribute>() || fieldInfo.HasAttribute<NonSerializedAttribute>() || fieldInfo.HasAttribute<IgnoreDataMemberAttribute>(); this.Ignore = fieldInfo.HasAttribute<IgnoreAttribute>(); }