Windows 8 metro HttpClient – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Windows 8 metro HttpClient – .NET – Fórum – Programujte.comWindows 8 metro HttpClient – .NET – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
JirkaX0
Newbie
7. 1. 2014   #1
-
0
-

Zdravím,

už delší dobu se snažím rozchodit parsování json kodu na widows 8 metro a nevím si rady jak na to už při samostatném čtení. Pokud někdo pomůže budu mu moc vděčný a velmi děkuji.

Padá to na řádku: var response = await httpClient.GetAsync("api/json.php");

Obsah json.php

[{"ID":1,"Username":"TEST","UserTest":"TEST1"},{"ID":2,"Username":"TEST2","UserTest":"TEST3"}]
 

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using System.Net.Http.Headers;

// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?…

namespace App5
{
    /// <summary>
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// </summary>
    public sealed partial class MainPage : Page
    {

        private HttpClient httpClient;

        public MainPage()
        {
            this.InitializeComponent();
            httpClient = new HttpClient();

            httpClient.BaseAddress = new Uri("http://192.168.1.39/api/json.php");
            httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

           
            httpClient.MaxResponseContentBufferSize = 256000;

        }


        protected override void OnNavigatedTo(NavigationEventArgs e)
        {

        }

        private async void GetUser(object sender, RoutedEventArgs e)
        {

            btnGetUsers.IsEnabled = false;
            
            var response = await httpClient.GetAsync("api/json.php");
            response.EnsureSuccessStatusCode(); // Throw on error code.

            var users = await response.Content.ReadAsStringAsync();

            OutputView.Text = users;
        }
    }
}
Nahlásit jako SPAM
IP: 78.102.74.–
Zed_10
Newbie
8. 1. 2014   #2
-
0
-

Ahoj, v osmičkách to nemám vyzkoušené, ale normálně se json deserializuje do dictionary.

Asi bych zkusil něco takového:

Dictionary<String, Object> users;
System.Web.Script.Serialization.JavaScriptSerializer json = New System.Web.Script.Serialization.JavaScriptSerializer();
 
users = Json.DeserializeObject(response.Content.ReadAsStringAsync());
Nahlásit jako SPAM
IP: 195.122.223.–
JirkaX0
Newbie
8. 1. 2014   #3
-
0
-

Díky, ale moc mi to nepomohlo :( chtěl bych čistě v C# zobrazit v textview celý ten obsah toho staženého jsonu a potom bych to rozparsoval.  

Na win7 na normální program mám už něco hotové ale tady na windows 8 metro se mi nic nedaří :(

Nahlásit jako SPAM
IP: 94.242.126.–
VladislavK0
Super člen
8. 1. 2014   #4
-
+1
-
Zajímavé

Ahoj možná to nebude ono, ale nemáš jenom chybu v  URL??

httpClient.BaseAddress = new Uri("http://192.168.1.39/api/json.php");

vs.

var response = await httpClient.GetAsync("api/json.php");

Nahlásit jako SPAM
IP: 37.48.39.–
Manželka programátora pošle svého muže koupit chleba s dovětkem kdyby měly housky přines jich deset! Co přinese programátor??
JirkaX0
Newbie
8. 1. 2014   #5
-
0
-

Večer vyzkouším a napíšu ale Uri("http://192.168.1.39/api/json.php"); mám použito výše na připojení. Ale nejsem teď u PC tak napíšu co to dělá, večer. 

Nahlásit jako SPAM
IP: 94.242.126.–
JirkaX0
Newbie
8. 1. 2014   #6
-
0
-

Jak zkouším tak bohužel bez úspěchu. Stačilo by pro začátek stáhnout obyčejně text co je na webové stránce a uložit do stringu. Banalita v C# pro desktop ale pro metro?

Edit: Vždy to spadne na čtení z webové stránky. 

Nahlásit jako SPAM
IP: 78.102.74.–
JirkaX0
Newbie
8. 1. 2014   #7
-
0
-

Čtení jsonu jsem teda vyřešil :

Přikládám snad někomu ulehčím práci ;)

            HttpClient client = new HttpClient();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
 
            HttpResponseMessage response = await client.GetAsync("http://test/json.php");
            string pole_test = await response.Content.ReadAsStringAsync();

            OutputView.Text = pole_test;

Teď vyřešit jak ho elegantně rozparsovat aby se dal použít pro každou buňku jiné TextView (Jak udělat každou číst zvlášť na string. JSON viz. níže: )

{"stav":0,"text":"Test","citat":"test2","Hodnota":"Ahoj svete!"} 

Nahlásit jako SPAM
IP: 78.102.74.–
VladislavK0
Super člen
9. 1. 2014   #8
-
0
-

Jo poprali se ti ty URL jak jsem psal

GetAsync pravdepodobne provede ...Combine(client.baseAdress,a cesta z parametru GetAsync)

takze vznikla cca nasledujici nesmyslna cesta

"http://192.168.1.39/api/json.php/api/json.php"

Nahlásit jako SPAM
IP: 37.48.45.–
Manželka programátora pošle svého muže koupit chleba s dovětkem kdyby měly housky přines jich deset! Co přinese programátor??
JirkaX0
Newbie
9. 1. 2014   #9
-
0
-

Jo nejspíše ano a jak teď na to koukám tak máš pravdu. Koukám na to parsování a to bude další oříšek.

Nahlásit jako SPAM
IP: 78.102.74.–
JirkaX0
Newbie
9. 1. 2014   #10
-
0
-

Pokud mám vygenerované toto:

public class RootObject
{
    public int stav { get; set; }
    public string text { get; set; }
    public string citat { get; set; }
}

Jak můžu toto použít do jednoho souboru a rozparsovat STRING pole_test

Diky
 

Edit: V jednom souboru to mám ;) ale to parsování není žádná sranda :(

Nahlásit jako SPAM
IP: 78.102.74.–
VladislavK0
Super člen
10. 1. 2014   #11
-
0
-
Nahlásit jako SPAM
IP: 37.48.44.–
Manželka programátora pošle svého muže koupit chleba s dovětkem kdyby měly housky přines jich deset! Co přinese programátor??
JirkaX0
Newbie
10. 1. 2014   #12
-
0
-

To právě není ono já to nepotřebuji surově sekat.  Já pořebuji použít na to přímo windows 8 JSON věci co mají nové ;) . Kdybych to chtěl sekat tak raději použiji XML. 

public class RootObject
{
    public int stav { get; set; }
    public string text { get; set; }
    public string citat { get; set; }
}
Nahlásit jako SPAM
IP: 78.102.74.–
Řešení
JirkaX0
Newbie
11. 1. 2014   #13
-
0
-
Vyřešeno Nejlepší odpověď

Tak po dnu jsem našel řešení! Windows 8.1 má implementovaný JSON.

using Windows.Data.Json;

Celé řešení dávám zde:

JSON: {"stav":"0","text":"Text1","text2":"Text2","text3":"Text3"}

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using Windows.Data.Json;
using System.Threading.Tasks;
using System.Text;
using System.Net.Http.Headers;
using System.Net.Http;



namespace App7
{

    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
        }

        private async void button1_Click(object sender, RoutedEventArgs e)
        {
            HttpClient client = new HttpClient();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            HttpResponseMessage response = await client.GetAsync("URL ADRESA");
            var re = await response.Content.ReadAsStringAsync();

            JsonObject jsonObject = JsonObject.Parse(re);
            string itemTitle = jsonObject.GetObject()["text"].GetString();

            test.Text = itemTitle;
          
        }
    }
}

Na toto téma jak se stáhne z webu a rozparsuje JSON na windows 8 metro by se dal napsat krásný článek na hlavní stránku programujte.com :D . 

Nahlásit jako SPAM
IP: 78.102.74.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 17 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý