2016-03-04 3 views
1

У меня возникли проблемы с получением ответа от запроса JSON в приложении формы Windows C#. Мой код выглядит следующим образом:Как добавить результат JSON на ярлык?

На FormLoad:

try 
     { 
      var url = "http://webpage.com/dir/sub/folder/app/app.json"; 
      var json = new WebClient().DownloadString(url); 

      Printer[] toners = JsonConvert.DeserializeObject<Printer[]>(json); 


      foreach (var j in toners) 
      { 
       lblOpt.Text = j.opt; 
       lblStatus.Text = j.status; 
       lblRemaining.Text = j.remaining; 
       lblCnt.Text = j.cnt; 
       lblCapa.Text = j.capa; 
      } 
     } 
     catch(Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
     } 

А также я получил этот метод:

class Printer 
    { 
     public string opt { get; set; } 
     public string status { get; set; } 
     public string remaining { get; set; } 
     public string cnt { get; set; } 
     public string capa { get; set; } 
    } 

Но когда форма загружается я получил следующее:

JSon Error

Это ответ, который я получил от JSON в браузер:

toner_black: { 
    opt: 1, 
    status: 0, 
    remaining: 23, 
    cnt: 3488, 
    capa: 5000, 
    id: "CK670EXP", 
    serial: "CRUM-15050630450" 
} 

ответ

1

Несколько вопросов здесь.

1) Ожидается массив, когда браузер возвращает один объект.

Printer[] toners = JsonConvert.DeserializeObject<Printer[]>(json); 

становится

var toner = JsonConvert.DeserializeObject<Printer>(json); 

2) Принтер свойства скрыты внутри toner_black собственности. Так что вам нужно еще один класс:

public class PrinterWrapper { 
    public Printer toner_black { get; set; } 
} 

3) Ваш Printer класс должен быть public - public class Printer { ... }

Final фрагмент выглядит следующим образом:

var toner = JsonConvert.DeserializeObject<PrinterWrapper>(json).toner_black; 
lblOpt.Text = toner.opt; 
lblStatus.Text = toner.status; 
lblRemaining.Text = toner.remaining; 
lblCnt.Text = toner.cnt; 
lblCapa.Text = toner.capa; 
+0

Хороший вызов на 'toner_black' собственности - я пропустил что бит в моем ответе! –

+0

Большое вам спасибо, это сработало идеально для меня! –

Смежные вопросы