Windows Phone 7 App och OData-feed för Jfokus

Idag börjar Sveriges största Java-konferense: Jfokus. Microsoft medverkar i år på konferensen liksom vi har gjort de senaste åren – för att tala om interoperabilitet och Microsoft-tekniker som Java-utvecklare kan ha nytta av . I år ligger stort fokus på Windows Azure och möjligheterna att köra Java på vår molnplattform, något som vi ser ett mycket stort intresse från kunder och partners kring. Tillsammans med Diversify och Neo Technologies lanserar vi också möjligheten att köra den populära javabaserade grafdatabasen Neo4j i Windows Azure.

Mattias Karlsson på Jfokus har skapat en REST-baserad tjänst för agendan för konferensen och även gjort en Android-app för att kolla in schemat och sessionerna. Eftersom jag håller en session om OData och ville testa skapa en OData-tjänst och klienter så bestämde jag mig för att göra en Windows Phone 7-app som visar agendan (källkoden för Windows Phone 7-appen och Odata-feed finns här):

ScreenShotTags ScreenShotSession

Jag återanvände Mattias JSON-baserade REST-tjänster och skrev en tunn wrapper som exponerar entiteterna som OData-Feeds och la tjänsten i Windows Azure: https://jfokusodata.cloudapp.net/ODataService.svc/

Det visade sig vara ganska enkelt genom att använda den inbyggda DataContractJsonSerializer som finns i .NET. Jag skapade klasser som motsvarade JSON-objekten och kunde sedan skapa en generisk metod för att ladda hem objekten och serialisera dessa till .NET-objekt:

     public class EntityService
    {
        const string baseURI = "https://www.jfokus.se/rest/v1/";

        public IQueryable<T> GetEntities<T>(string path)
        {
            var serializer = new DataContractJsonSerializer(typeof(List<T>));
            byte[] response;

            using (WebClient client = new WebClient())
            {
                response = client.DownloadData(baseURI + path);
            }

            List<T> entities;

            using (var ms = new MemoryStream(response))
            {
                entities = serializer.ReadObject(ms) as List<T>;
            }

            return entities.AsQueryable();
        }
    }

I Windows Phone 7-appen använder jag sedan OData-biblioteket för WP7 för att hämta hem och arbeta med entiteterna från min tjänst.

Ladda hem och testa om du har en Windows Phone eller vill se hur projektet ser ut!