Если ваша пара ключ / значение не является фиксированной и данные должны быть конфигурируемыми, то в Newtonsoft.json есть одна особенность, которая будет использоваться здесь, и это [JsonExtensionData]
. Подробнее
Данные расширения теперь записываются при сериализации объекта.Чтение и запись данных расширения позволяет автоматически выполнять обход всех JSON без добавления каждого свойства к типу .NET, к которому вы десериализуетесь.Объявите только те свойства, которые вас интересуют, и пусть данные расширений сделают все остальное.
В вашем случае пара ключ / значение с 0,1,2,3.......N
имеет динамические данные, поэтому ваш класс будет
Так что создайте одно свойство, которое собирает все ваши динамические пары ключ / значение с атрибутом [JsonExtensionData]
.И ниже я создаю тот с именем DynamicData
.
class MainObj
{
[JsonExtensionData]
public Dictionary<string, JToken> DynamicData { get; set; }
public int result_code { get; set; }
public string result_message { get; set; }
public string result_output { get; set; }
}
И затем вы можете десериализовать ваш JSON как
string json = "Your json here"
MainObj mainObj = JsonConvert.DeserializeObject<MainObj>(json);
Редактировать:
Если вы хотите собрать значение вашего динамического ключа в классе, вы можете использовать ниже структуру класса.
class MainObj
{
[JsonExtensionData]
public Dictionary<string, JToken> DynamicData { get; set; }
[JsonIgnore]
public Dictionary<string, ChildObj> ParsedData
{
get
{
return DynamicData.ToDictionary(x => x.Key, y => y.Value.ToObject<ChildObj>());
}
}
public int result_code { get; set; }
public string result_message { get; set; }
public string result_output { get; set; }
}
public class ChildObj
{
public string id { get; set; }
public string name { get; set; }
public string cdate { get; set; }
public string _private { get; set; }
public string userid { get; set; }
public int subscriber_count { get; set; }
}
И затем вы можете десериализовать ваш JSON как
MainObj mainObj = JsonConvert.DeserializeObject<MainObj>(json);
И затемВы можете получить доступ к каждой из ваших десериализованных данных, таких как
int result_code = mainObj.result_code;
string result_message = mainObj.result_message;
string result_output = mainObj.result_output;
foreach (var item in mainObj.ParsedData)
{
string key = item.Key;
ChildObj childObj = item.Value;
string id = childObj.id;
string name = childObj.name;
string cdate = childObj.cdate;
string _private = childObj._private;
string userid = childObj.userid;
int subscriber_count = childObj.subscriber_count;
}