Zine.net online

Witaj na Zine.net online Zaloguj się | Rejestracja | Pomoc
w Szukaj

Bartek Szafko

Wszystko idzie do Linq

Linq - language integrated query, to w dużym uproszczeniu możliwość definiowania zapytań podobnych do SQLa dla różnych źródeł danych. Domyślnie Linq wspiera XML (XLinq) oraz bazy danych (LinqToSql).

Ostatnio powstaje bardzo dużo rozszerzeń do Linq. Jedno z nich zwróciło moją szczególną uwagę: JsonToLinq. Javascript Object Notation jest formatem, w którym można zserializować obiekty JavaScriptowe i później je szybko zdeserializować. Czytałem (niestety w tej chwili nie pamiętam źródła), że JSON jest wielokrotnie szybszy niż parsowanie XML przy AJAXowych wywołaniach.

Przykładowo JSON może wyglądać tak: { 'id': 2,
'login': 'wiesiek',
'background_path': '/users/sztywny/background',
'avatar_path': '/users/sztywny/avatar',
'current_status_path': '/statuses/12345'
}

Więcej o JSONIE.

Biblioteka JSON.NET implementuje odpowiednie ( i co najważniejsze szybkie)readery dla jsona, przez co można skorzystać z wszystkich możliwości jakie daje Linq. Dla powyższego przykładu JSONa, odczytujący go kod może wyglądać tak:

    1 user.Id = jsonResponse.PropertyValue<int>("id");

    2 user.Name = jsonResponse.PropertyValue<string>("login");

    3 user.ScreenName = jsonResponse.PropertyValue<string>("login");



Jednak prawdziwe możliwości ujawnia przy przetwarzaniu bardziej złożonych struktur:

[{ "type":"DirectedMessage",
"body":"aaaa",
"transport":{"name":"www","id":6},
"id":2424062,
"user_path":"/users/xxx",
"recipient_path":"/users/yyyy",
"created_at":"2008-06-25 20:02:32"
},{ "type":"Status",
"body":"zzzzzzz",
"transport":{"name":"api","id":7},
"id":2424061,
"user_path":"/users/rrrr",
"created_at":"2008-06-25 20:02:10"
}]


Żeby z takiej reprezentacji stworzyć strukturę obiektów można zrobić coś takiego:

    1 JArray jsonResponse = JArray.Load(new JsonReader(reader));

    2 if (jsonResponse != null)

    3 {

    4     var _tweets = from o in jsonResponse.Children<JObject>()

    5             select new Tweet()

    6                         {

    7                             DateCreated = o.PropertyValue<DateTime>("created_at"),

    8                             Id = o.PropertyValue<long>("id"),

    9                             Text =  o.PropertyValue<string>("body"),

   10                             User = GetUser(ApiUrl + o.PropertyValue<string>("user_path"))

   11                         };

   12  }



A piszę o tym dlatego, że zacząłem bawić się API do BLIPa, które wszystkie wyniki zwraca właśnie w formacie JSON.

To co próbuje zrobić to dostosować fajnego klienta Twitter(protoplasty blipa) w wpf do współpracy z naszym rodzimym serwisem. Udało mi się już zalogować do serwisu i pobrać ostatnie wiadomości, jednak jak na razie przy większej liczbie żądań pojawia się błąd :( wydaje mi się, że jest to bolączka tego rozwiązań.



Oryginalny klient Twittera nazywa się Witty i ma całkiem ciekawy kod :)

Tekst ukazał się również na blogu Bartka Szafko.
Opublikowane 26 czerwca 2008 18:48 przez bszafko
Filed under: , , , , ,

Komentarze:

Brak komentarzy
Komentarze anonimowe wyłączone
W oparciu o Community Server (Personal Edition), Telligent Systems