Snippets taken from here (if link is broken use this)

UCLASS()
class UMyObject : public UObject
{
    GENERATED_BODY()
 
public:
    UFUNCTION(BlueprintCallable)
    float Multiply(float OtherValue)
    {
        return MyValue * OtherValue;
    }
 
    UPROPERTY(EditAnywhere)
    float MyValue = 2.3f;
 
    UPROPERTY(EditAnywhere)
    TArray<int32> MyValueArray;
 
    float UnAnnotatedValue = 3.0f;
};
UClass* MyObjectsClass = UMyObject::StaticClass();
 
for (TFieldIterator<FProperty> PropertyIterator( MyObjectsClass); PropertyIterator; ++PropertyIterator )
{
    FProperty* Property = *PropertyIterator;
 
    // Would log "MyValue" and "MyValueArray"
    UE_LOG( LogTemp, Log, TEXT( "%s" ), *Property->GetName() );
}
 
for (TFieldIterator<UFunction> FunctionIterator( MyObjectsClass); FunctionIterator; ++FunctionIterator)
{
    UFunction* Func = *FunctionIterator;
 
    // Would log Multiply
    UE_LOG(LogTemp, Log, TEXT( "%s" ), *FunctionIterator->GetName());
}