2013-11-27 3 views
0

Я пытаюсь скачать в виде JSON stringand назначения его TextArea:Как декодировать строку как JSON

private async void KliknijMnie_Click(object sender, RoutedEventArgs e) 
{ 
    try 
    { 
     ProgressBarRequest.Visibility = System.Windows.Visibility.Visible; 

     HttpClient client = new HttpClient(); 

     HttpResponseMessage response = await client.GetAsync("http://someurl.with?parameters=inURL"); 
     response.EnsureSuccessStatusCode(); 
     var responseBody = await response.Content.ReadAsStringAsync(); 

     var root1 = JsonConvert.DeserializeObject<uzytkownika>(responseBody); 
     this.DataContext = root1; 

     //fileName.Text = root1; 
    } 
    catch 
    { 
     string responseBody = "some errors"; 
    } 
    finally 
    { 
     ProgressBarRequest.Visibility = System.Windows.Visibility.Collapsed; 
    } 
} 

класс 'uzytkownika':

public class Day1 
{ 
    public int @int { get; set; } 
    public string str { get; set; } 
    public string color { get; set; } 
    public object text { get; set; } 
    public string czas { get; set; } 
    public bool funkcje { get; set; } 
} 

public class Day2 
{ 
    public int @int { get; set; } 
    public string str { get; set; } 
    public string color { get; set; } 
    public object text { get; set; } 
    public string czas { get; set; } 
    public bool funkcje { get; set; } 
} 

public class Day3 
{ 
    public int @int { get; set; } 
    public string str { get; set; } 
    public string color { get; set; } 
    public object text { get; set; } 
    public string czas { get; set; } 
    public bool funkcje { get; set; } 
} 

(....) 

public class Day30 
{ 
    public int @int { get; set; } 
    public string str { get; set; } 
    public string color { get; set; } 
    public object text { get; set; } 
    public string czas { get; set; } 
    public bool funkcje { get; set; } 
} 

public class Grafik 
{ 
    public Day1 day1 { get; set; } 
    public Day2 day2 { get; set; } 
    public Day3 day3 { get; set; } 
    (....) 
    public Day30 day30 { get; set; } 
} 

public class uzytkownika 
{ 
    public string imie { get; set; } 
    public string nazwisko { get; set; } 
    public bool status { get; set; } 
    public string msg { get; set; } 
    public string miesiacTXT { get; set; } 
    public string lastUpdate { get; set; } 
    public string updatedBy { get; set; } 
    public Grafik grafik { get; set; } 
} 

и сетка:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 
    <Button Name="KliknijMnie" Margin="10,10,254,507" Click="KliknijMnie_Click">pobierz dane</Button> 
    <StackPanel Margin="0,143,0,10"> 
     <StackPanel Orientation="Horizontal"> 
      <TextBlock Width="200" Text="First name"></TextBlock> 
      <TextBlock Text="{Binding imie}" Width="230"></TextBlock> 
     </StackPanel> 
    </StackPanel> 
    <StackPanel Margin="0,143,0,10"> 
     <StackPanel Orientation="Horizontal"> 
      <TextBlock Width="200" Text="LastName"></TextBlock> 
      <TextBlock Text="{Binding nazwisko}" Width="230"></TextBlock> 
     </StackPanel> 
    </StackPanel> 
</Grid> 

Что случилось? Почему root1 не присвоен textblock?

+1

Ваш класс совершенно неправильно. Он должен соответствовать JSON. – SLaks

+3

Пожалуйста, не назовите свои методы, переменные, классы или элементы управления на польском языке ... – MarcinJuraszek

+0

Предлагаю вам сделать самое простое, используя Json.net (бесплатную библиотеку). Я хочу предложить вам этот [хороший сайт] (http://json2csharp.com), который создает выходной класс C# из строки Json, поскольку это может быть очень полезно, если вы решите не использовать Json.net. –

ответ

2

Код ссылки можно использовать ниже. Предположим, что вам нужно, чтобы отобразить имя пользователя в вашем TextBlock с помощью facebook Graph API файл

private void KliknijMnie_Click(object sender, RoutedEventArgs e) 
    { 
     WebClient webClient = new WebClient(); 
     webClient.DownloadStringCompleted += webClient_DownloadStringCompleted; 
     ProgressBarRequest.Visibility = System.Windows.Visibility.Visible; 
     webClient.DownloadStringAsync(new Uri("http://graph.facebook.com/stackoverflow")); 
    } 

    void webClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
    { 
     try 
     { 
      if (!string.IsNullOrEmpty(e.Result)) 
      { 
       var root1 = JsonConvert.DeserializeObject<RootObject>(e.Result); 
       this.DataContext = root1; 
     } 
    } 
} 

и JSON парсер класса (RootObject.cs) должно быть, как это, вы можете также использовать json2csharp.com для создания дополнительных классов JSON парсер. Все проанализированные данные хранятся в корневом каталоге 1, и вы можете создать ссылку на них.

public class Location 
{ 
public string street { get; set; } 
public string city { get; set; } 
public string state { get; set; } 
public string country { get; set; } 
public string zip { get; set; } 
} 

public class Cover 
{ 
public long cover_id { get; set; } 
public string source { get; set; } 
public int offset_y { get; set; } 
public int offset_x { get; set; } 
} 

public class RootObject 
{ 
public string about { get; set; } 
public string category { get; set; } 
public string founded { get; set; } 
public bool is_published { get; set; } 
public Location location { get; set; } 
public string mission { get; set; } 
public string phone { get; set; } 
public int talking_about_count { get; set; } 
public string username { get; set; } 
public int were_here_count { get; set; } 
public string id { get; set; } 
public string name { get; set; } 
public string link { get; set; } 
public int likes { get; set; } 
public Cover cover { get; set; } 
} 

В вашем xmal у вас есть

<TextBlock Name="usernamebox" Text="{Binding username}"></TextBlock> 

теперь присвоить JSon значение объекта для TextBlock вы можете

this.usernamebox.DataContext = root1.username; 
+0

Хорошо, мой пример выше работает отлично после смены класса. Теперь я меняю исходный код и класс json (с json2csharp.com), и это не сработает. У меня такие ошибки: исключение типа Newtonsoft.Json.JsonReaderException произошло в Newtonsoft.Json.DLL и не обрабатывалось до управляемой/родной границы. Первое исключение случайного типа типа Newtonsoft.Json.JsonReaderException. произошел в Newtonsoft.Json.DLL Исключение типа «Newtonsoft.Json.JsonReaderException» произошло в Newtonsoft.Json.DLL и не обрабатывалось до управляемой/родной границы. Можете ли вы мне помочь? – breq

+0

catch возвращает эту ошибку 'ERROR! : Неожиданный символ, встречающийся при разборе значения: <. Путь '', строка 0, позиция 0. '. Я новичок в C#, и я не знаю, как исправить эту проблему. – breq

+0

Проверьте следующие вещи: 1) Текстовый блок, который вы привязываете, должен точно совпадать с объектом json в вашем классе. 2) проверьте ответ, который вы получаете через свой URI в своем браузере. Клиентский плагин/надстройка REST и печать результатов в visual studio. Это даст краткое представление о том, как вы могли бы исправить эту проблему. – Dexto

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