In-site Tools
As mentioned there are CMS plugins but they are quite opinionated and basic.
But there are also "In-code tools".
On a recent project I inherited a Profile Page template that had a fairly short Profile section but a large collection of related articles with the person as the Author.
I did not want to duplicate the long list of articles so they were marked up as Microdata.
However, the Profile part of the page was short and ideal for JSON-LD and there is no issue mixing both formats in a single page.
One of the issues with JSON-LD is it doesn't really play nicely with C#, so developers often use helper methods or libraries to handle JSON-LD e.g. serialising the JSON object directly into the Razor view.
So I choose to test Schema.NET which describes itself as "Schema.org objects turned into strongly typed C# POCO classes for use in .NET" which sounded ideal.
However, I was following this superb Person Schema example from Daniel K Cheung and I wanted to use @graph to create a relationship between:
@type": "ProfilePage"
and
@type": "Person"
but this would not compile using Schema.NET.
I got in touch with super talented author, Muhammad Rehan Saeed, who very kindly explained @graph was not available in Schema.NET and that he was "Not actively developing it further at the moment". Looking at Muhammad's full time role and other projects this was hardly surprising!
So I decided to add the JSON-LD to the template and as all of the variables were already available to render the view it was not a great deal of work to add them to the JSON-LD using the @ escape where required. Where I had not created a variable you will notice you can also include @Model.Content.Bio.