Graeme_Grant
Причина, по которой у вас возникли проблемы, заключается в том, что вы не можете десериализовать словарь в список.
Когда вы смотрите на объект JSON 'res_data', есть 3 набора пар ключей и значений:
'32':{ 'state_id':'32','state_name':'ANDAMAN & NICOBAR'},
'1' :{ 'state_id':'1','state_name':'ANDHRA PRADESH'},
'3' :{ 'state_id':'3','state_name':'ARUNACHAL PRADESH'}
Поэтому, чтобы исправить это, вам нужно сделать что-то вроде:
public class State
{
[JsonProperty("state_id")]
public string StateId { get; set; }
[JsonProperty("state_name")]
public string StateName { get; set; }
}
public class RootObject
{
[JsonProperty("api_res_key")]
public string ApiResKey { get; set; }
[JsonProperty("res_status")]
public string ResStatus { get; set; }
[JsonProperty("res_data")]
public Dictionary<int, State> ResData { get; set; }
}
Затем вы можете десериализовать JSON:
var data = JsonHelper.ToClass<RootObject>(JsonString);
А вот и вспомогательный класс из этой статьи:
Работа с JSON в C# и VB[
^]
public static class JsonHelper
{
public static string FromClass<T>(T data, bool isEmptyToNull = false,
JsonSerializerSettings jsonSettings = null)
{
string response = string.Empty;
if (!EqualityComparer<T>.Default.Equals(data, default(T)))
response = JsonConvert.SerializeObject(data, jsonSettings);
return isEmptyToNull ? (response == "{}" ? "null" : response) : response;
}
public static T ToClass<T>(string data, JsonSerializerSettings jsonSettings = null)
{
var response = default(T);
if (!string.IsNullOrEmpty(data))
response = jsonSettings == null
? JsonConvert.DeserializeObject<T>(data)
: JsonConvert.DeserializeObject<T>(data, jsonSettings);
return response;
}
}
Ajay_Saini
Большое вам спасибо ... все работает так, как и ожидалось. Что делать, если res_data имеет тип массива.
строка JsonString = @"{'api_res_key':'HASH777VALID','res_status':'200','res_data':[{ 'state_id':'32','state_name':'ANDAMAN & NICOBAR'},{ 'state_id':'1','state_name':'ANDHRA PRADESH'},{ 'state_id':'3','state_name':'ARUNACHAL PRADESH'}]}";
Какие изменения мне нужно сделать, чтобы десериализовать его?