Managed to get it working using JObject but it’s not pretty:
var json = "{\r\n\"Threads\": \r\n{\r\n    \"Program1\" : \r\n    {\r\n        \"Filepath\": \"C:\\\\ProgramFiles(x86)...\",\r\n        \"Priority\": 0\r\n    },\r\n    \"Program2\" : \r\n    {\r\n        \"Filepath\": \"C:\\\\ProgramFiles(x86)...\",\r\n        \"Priority\": 1\r\n    },\r\n    \"Program3\" : \r\n    {\r\n        \"Filepath\": \"C:\\\\ProgramFiles(x86)...\",\r\n        \"Priority\": 3\r\n    }\r\n}}";
var obj = JObject.Parse(json);
var threads = (JObject)obj["Threads"];
var sortedObj = new JObject(
    threads.Properties().OrderByDescending(p => (int)p.Value["Priority"])
);
Console.WriteLine(sortedObj.ToString(Formatting.Indented));
1
solved How to order descending JSON content [closed]