private static IFieldData GetFieldData(IClrTypeDecorator type, ulong objRef, ClrInstanceFieldDecorator fieldRef, bool interior,
			string fieldName)
		{
			ulong address = GetAddress(objRef, fieldRef, interior);
			IClrTypeDecorator fieldType = GetFieldType(type, fieldRef, address);
			string fieldValue = GetFieldValue(objRef, fieldRef, interior, address, fieldType);

			return new FieldData
			{
				Name = fieldName,
				ReferenceObject = GetReferenceObjectFactory(fieldType, address, fieldValue, false)
			};
		}
		private static string GetFieldValue(ulong objRef, ClrInstanceFieldDecorator fieldRef, bool interior, ulong address, IClrTypeDecorator fieldType)
		{
			string fieldValue = string.Empty;

			if (fieldRef.HasSimpleValue)
			{
				fieldValue = GetValueTypeValue(objRef, fieldRef, interior);
			}

			if (fieldRef.IsObjectAndNotString && address != Null && fieldType.HasSimpleValue)
			{
				fieldValue = GetBoxedValueTypeValue(fieldType, address);
			}
			return fieldValue;
		}
		private static MultiElementDictionary<string, Func<IFieldData>> GetObjectFields(IClrTypeDecorator type, ulong objRef, bool isInterior)
		{
			var objectFields = new MultiElementDictionary<string, Func<IFieldData>>();
			bool interior = !type.IsObjectReference;

			if (isInterior)
			{
				interior = false;
			}

			foreach (var field in type.Fields)
			{
				string fieldName = field.Name;
				ClrInstanceFieldDecorator fieldRef = field;
				objectFields.Add(fieldName, () => GetFieldData(type, objRef, fieldRef, interior, fieldName));
			}

			return objectFields;
		}
		private static IClrTypeDecorator GetFieldType(IClrTypeDecorator type, ClrInstanceFieldDecorator fieldRef, ulong address)
		{
			IClrTypeDecorator fieldType = fieldRef.Type;

			if (address != Null && fieldRef.IsObjectAndNotString)
			{
				fieldType = type.Heap.GetObjectType(address);
			}
			return fieldType;
		}
		private static string GetBoxedValueTypeValue(IClrTypeDecorator fieldType, ulong address)
		{
			string fieldValue = string.Empty;

			object value = fieldType.GetValue(address);
			if (value != null)
			{
				fieldValue = value.ToString();
			}
			return fieldValue;
		}