Как сказал Марк в комментариях к вопросу - почему бы не использовать обычный класс:
public class Rootobject
{
public His[] His { get; set; }
}
public class His
{
public string Date { get; set; }
public string StatusMsg { get; set; }
public string Msg { get; set; }
public string StatusDate { get; set; }
}
Десериализуйте его и воспользуйтесь LINQ:
var json = "{\r\n\t\"His\": [\r\n {\r\n \"Date\": \"3/18/2019 6:30:45 PM\",\r\n \"StatusMsg\": \"test3\"\r\n },\r\n {\r\n \"Date\": \"3/21/2019 12:13:02 PM\",\r\n \"Msg\": \"test2\"\r\n },\r\n {\r\n \"StatusDate\": \"3/17/2019 9:26:00 AM\",\r\n \"Msg\": \"test1\"\r\n },\r\n ]\r\n}";
var obj = JsonConvert.DeserializeObject<Rootobject>(json);
var sortedList = obj.His.OrderByDescending(o => o.Date).ToList();
Редактировать : Если вы не хотите использовать класс, вы можете сделать что-то вроде этого:
var json = "{\r\n\t\"His\": [{\r\n\t\t\t\"Date\": \"3/18/2019 6:30:45 PM\",\r\n\t\t\t\"StatusMsg\": \"test3\"\r\n\t\t}, {\r\n\t\t\t\"Date\": \"3/21/2019 12:13:02 PM\",\r\n\t\t\t\"Msg\": \"test2\"\r\n\t\t}, {\r\n\t\t\t\"Date\": \"3/17/2019 9:26:00 AM\",\r\n\t\t\t\"Msg\": \"test1\"\r\n\t\t},\r\n\t]\r\n}\r\n";
JObject jobj = JObject.Parse(json);
JArray array = jobj["His"];
JArray sorted = new JArray(array.OrderByDescending(obj => (DateTime)obj["Date"]));
Это предполагает, что каждый объект JSON будет всегда иметь свойство с именем "Date"