Ваша проблема в том, что JSON.NET по умолчанию использует имена свойств в случае верблюда. Это то, что ваш код ищет по умолчанию:
{"country":[{"countryId":"1","countryName":"USA"}]}
Вам необходимо вручную объявить имена свойств JSON.NET для вашей модели:
public class Countries
{
[JsonProperty(PropertyName = "TotalCount")]
string TotalCount { get; set; }
[JsonProperty(PropertyName = "Country")]
public List<Ctry> Country { get; set; }
}
public class Ctry
{
[JsonProperty(PropertyName = "CountryId")]
string CountryId { get; set; }
[JsonProperty(PropertyName = "CountryName")]
string CountryName { get; set; }
}
Я проверил это, и оно работает с вашими данными.
В качестве примечания я объявил все имена свойств, потому что мне нравится поддерживать ручное управление сериализацией и десериализацией, в вашем случае вы могли бы пропустить это, просто объявив несколько слов.
Это также можно исправить, настроив уровень защиты для своих свойств, если вы не хотите вручную определять имена свойств:
public class Countries
{
public string TotalCount { get; set; }
public List<Ctry> Country { get; set; }
}
public class Ctry
{
public string CountryId { get; set; }
public string CountryName { get; set; }
}
Таким образом, JSON.NET может автоматически сопоставлять имена свойств, если они общедоступны.
@ Tom W - JSON.NET автоматически преобразует типы, когда это возможно, int в строку и string в int - это хорошо.