I would have said the opposite. Doing it from the JSON would be too much work compared to the other way, especially since it looks like you're already using C#.
Literally all you have to do once you've read the save file into a byte array is SerializeData =...
DLC stuff didn't seem to stick simply by setting the unlocked pot values. The best way to confirm this is by loading a save from someone with the DLC on a Switch without the DLC
This script will set the slots of all your Pokemon to multi types
foreach (var character in Save.characterStorage.characterDataDictionary)
{
var slotTypes = character.Value.data.potential.slotPropertyTypes;
for (int i = 0; i < slotTypes.Count; i++)
{
slotTypes[i] = 2;
}...
No, it won't t run with Wine. It'll run on Mono or .NET Core.
And everything about the save is documented. The program deserializes the entire thing for you.