Appeler un Web Service REST/JSON en .NET

Les Web Services REST avec le format JSON sont devenus en peu de temps un nouveau moyen d’implémenter des Web Services de manière simple (sans formatage XML et parsing) et orientés données.

Si la procédure de création de Web Services RPC ou REST et SOAP ou JSON en .Net est simplifiée grâce à WCF, et que l’appel d’un Web Service RPC/SOAP est quasi transparent pour le développeur, il n’en est pas de même pour la création du client en REST/JSON.

Ce petit post va vous permettre de mettre en place rapidement un client Web Service .NET avec REST/JSON. Je fais l’impasse sur l’implémentation serveur, je vous laisse vous référer aux différents liens placés en fin de billet.

  • Ajoutez une référence a votre Web Service dans votre projet VS et pointez sur votre URL de type : www.monsite.com/monservice.svc
    • Cet étape va générer votre client Web Service, mais surtout ce qui nous intéresse, les objets en transit,
  • Ajoutez JSON.NET dans votre projet afin de déserialiser vos données automatiquement,
  • Implémentez le code suivant :
Uri requestUri = new Uri("www.monsite.com/monservice.svc/users/5474");
WebRequest webRequest = WebRequest.Create(requestUri);
WebResponse webResponse = webRequest.GetResponse();
Stream response = webResponse.GetResponseStream();
StreamReader reader = new StreamReader(response);
Newtonsoft.Json.JsonSerializer jsonSer = new Newtonsoft.Json.JsonSerializer();
MyUser user = (MyUser) jsonSer.Deserialize(reader, typeof(MyUser));
  • Vous obtenez ainsi votre objet côté client, il ne vous reste plus qu’à en faire bon usage,
  • Vous pouvez également récuperer une liste ou un tableau d’objets avec le code suivant :
List<MyUser> usersList = (List<MyUser>)jsonSer.Deserialize(reader, typeof(List<MyUser>));

Je vous conseille fortement de créer une méthode générique avec 3 parametres (URL, type de résultat et résultat) afin de pouvoir réutiliser ce code a loisirs.

Update : Vous avez également la possibilité de ne pas utiliser JSON.NET avec le Serializer intégré dans .Net 3.5

DataContractJsonSerializer jsonSer = new DataContractJsonSerializer(typeof(List<MyUser>));
List<MyUser> usersList = (List<MyUser>)jsonSer.ReadObject(response);

Après quelques tests, il semblerait que le parser de MS soit le plus rapide. Cependant cette page semble donner plus d’informations concrètes :

Publicités
%d blogueurs aiment cette page :