So this is pretty easy to reproduce. Create a .Net Framework 4.7.2 project and add System.Text.Json nuget package (v 5.0.2), see that it says it's going to add dependent packages including System.ValueTuple.
But from what I understand it shouldn't.
.Net Framework 4.7.2 is .Net Standard 2.0 (see here https://learn.microsoft.com/en-us/dotnet/standard/net-standard) and includes System.ValueTuple within the BCL.
We can see on the nuget website for System.Text.Json https://www.nuget.org/packages/System.Text.Json that for .net standard 2.0 System.ValueTuple is not a dependency
but it is for framework 4.6.1
So here is the big question... why is nuget resolving the dependencies for 4.6.1 when my project targets 4.7.2 which is .Net Standard 2.0??
As discussed in the comments, according to this GitHub issue: "If a library is netstandard only, net472 will pick that. If a library has any net framework targets, net472 will pick that instead."
So this is the expected, if not particularly obvious, behaviour.
Fortunately, the System.ValueTuple
NuGet package has a separate target for .NET 4.7 which forwards the types to the BCL implementation, so the extra reference shouldn't cause any problems.