@estry

Как разобрать ответ JSON в C#?

Привет. Подскажите как разобрать JSON?
Составил объектную модель
https://puu.sh/ARetB/df9ba6c614.png
Теперь мне нужен параметр Sm.text, как его получить?
Делаю так:
RootObject Res = new RootObject();
Res = JsonConvert.DeserializeObject(Response);
Res.sms = new Sm();
string strTextSMS = Res.sms.text;
Не получается. Ошибка. Что я упускаю?

public class Sm
{
public int id { get; set; }
public DateTime created_at { get; set; }
public DateTime date { get; set; }
public string sender { get; set; }
public string text { get; set; }
public string code { get; set; }
}

public class RootObject
{
public int id { get; set; }
public DateTime created_at { get; set; }
public string phone { get; set; }
public string product { get; set; }
public int price { get; set; }
public string status { get; set; }
public DateTime expires { get; set; }
public List sms { get; set; }
public bool forwarding { get; set; }
public string forwarding_number { get; set; }
}

Спасибо.
С Уважением.
  • Вопрос задан
  • 457 просмотров
Решения вопроса 2
@kttotto
пофиг на чем писать
0. Нет необходимости инициализировать Res перед десериализацией, DeserializeObject вернет объект и Res будет указывать на него.

1. Десериализовать надо к конкретному типу, а так он десериализует к object и нужные Вам поля будут не видны.
Res = JsonConvert.DeserializeObject<RootObject>(Response);
2. Список нужно указывать с конкретным типом, иначе это будет опять список object
public List<Sm> sms { get; set; }

3. Если Res.sms это список, то поля text у него не будет, Вам нужно взять конкретный объект из этого списка и у него уже читать поле text.
Res.sms[0].text

4. В итоге все сводится к двум строчкам
var Res = JsonConvert.DeserializeObject<RootObject>(Response);
var strTextSMS = Res.sms[0].text;  // индекс 0 для примера
Ответ написан
Комментировать
@Beltoev
Живу в своё удовольствие
Думаю, нет смысла описывать ошибки в коде и оставлять замечания. Просто пример того, как получить первое смс:
var rootObject = JsonConvert.DeserializeObject<RootObject>(Response);
string firstSmsText = rootObject.sms.First().text;
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
VoidVolker
@VoidVolker Куратор тега C#
Dark side eye. А у нас печеньки! А у вас?
https://app.quicktype.io/#r=json2csharp - вот, используйте для генерации парсеров JSON.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы