Мне не удалось создать рабочее решение с существующими ответами на вопросы.
Я успешно использую следующий класс С#
public class country
{
public string country_id;
public string country_name;
}
со следующим кодом. Результат - список стран
List<country> countries = new List<country>();
var streamTask = client.GetStreamAsync("https://xxx");
var serializer = new DataContractJsonSerializer(typeof(List<country>));
countries = serializer.ReadObject(await streamTask) as List<country>;
НО: теперь я изменил API и получил результат, в котором я понятия не имею, как создать класс для использования того же кода.
Это результат вызова API:
{
"api":{
"results": 2
"countries":{
"1":"Austria"
"2":"Germany"
}
}
}
Это вложенный объект, а у «стран» даже нет имен свойств.
Как мне десериализовать этот результат?





Для начала вам нужно будет изменить ваши контракты данных:
public class apiResults
{
public int results;
public countries countries;
}
public class apiResponse
{
public apiResults api;
}
[DataContract]
public class countries
{
[DataMember(Name = "1")]
public string Country1 {get; set;}
}
а затем используйте его, как и раньше:
var serializer = new DataContractJsonSerializer(typeof(apiResponse));
var result = serializer.ReadObject(stream) as apiResponse;
Console.WriteLine(result.api.countries.Country1);
Проблема здесь в том, что вы жестко задаете количество доступных стран. Лучшим способом будет десериализация вашего нового класса стран в массив.
Если вы можете использовать NewtonsoftJson — решение намного проще:
public class apiResults
{
public int results;
public Dictionary<int, string> countries { get; set; }
}
public class apiResponse
{
public apiResults api;
}
и использование:
var result = JsonConvert.DeserializeObject<apiResponse>(responseAsString);
Console.WriteLine(result.api.countries[1]);
Вы спасли мой день, и я узнал кое-что, что поможет мне в будущем. Я действительно счастлив. БОЛЬШОЕ СПАСИБО!