Replicating TMaps, what are my options?

my approach

bool FMyFragmentPair::NetSerialize(FArchive& Ar, UPackageMap* Map, bool& bOutSuccess)
{
	if (!Key.NetSerialize(Ar, Map, bOutSuccess) || !bOutSuccess)
		return false;
	if (!Value.NetSerialize(Ar, Map, bOutSuccess) || !bOutSuccess)
		return false;
	return true;
}

bool FMyFragments::NetSerialize(FArchive& Ar, UPackageMap* Map, bool& bOutSuccess)
{
	bOutSuccess = false;
	
	if (Ar.IsSaving())
	{
		TArray<FMyFragmentPair> pairs;

		for (const TPair<FGameplayTag, FInstancedStruct>& fragment : Fragments)
		{
			pairs.Emplace(fragment.Key, fragment.Value);
		}
		
		Ar << pairs;

		bOutSuccess = !Ar.IsError();
	}
	
	else if (Ar.IsLoading())
	{
		TArray<FMyFragmentPair> pairs;
		Ar << pairs;

		Fragments.Empty();
		Fragments.Reserve(pairs.Num());
		
		for (FMyFragmentPair& pair : pairs)
		{
			Fragments.Emplace(MoveTemp(pair.Key), MoveTemp(pair.Value));
		}

		bOutSuccess = !Ar.IsError();
	}
	
	return bOutSuccess;
}