Convertir du Json et XML en classes C# fortement typées

Visual studio 2012, offre la possibilité de convertir des données XML ou Json en classe C# fortement typée. Quand l’on doit interagir avec des services REST comme les API de google, il est intéressant de pouvoir utiliser le nom des objets dans son code et ainsi éviter d’utiliser un parser XML ou Json.

Pour que cela fonctionne, il faut être dans un projet utilisant le framework .net 4.5

  1. Copier une source XML ou Json dans le presse-papier (Ctrl+A – Ctrl+C)
    1-convertxml
  2. Se placer dans un fichier de code
    2-convertxml
  3. Ouvrir le menu Edition > Collage spécial > Coller XML sous forme de classes
    3-convertxml
  4. Voilà la classe fortement typée créée
    4-convertxml
  5. Voici une classe d’extension pour simplifier la sérialisation des objets
    using Newtonsoft.Json;
    using System.IO;
    using System.Text;
    using System.Xml.Serialization;
    
    namespace SampleCopyObject
    {
        public static class Deserializer
        {
            //nécessite le package nuget : Json.Net http://james.newtonking.com/json
            public static T DeserializeJson<T>(this string strObject)
            {
                return JsonConvert.DeserializeObject<T>(strObject);
            }
            public static T DeserializeXml<T>(this string strObject)
            {
                var stream = strObject.ToStream();
                var serializer = new XmlSerializer(typeof(T));
                return (T)serializer.Deserialize(stream);
            }
            public static Stream ToStream(this string strObject)
            {
                var byteArray = Encoding.UTF8.GetBytes(strObject);
                return new MemoryStream(byteArray);
            }
        }
    }
  6. Solution de test
    using System.Net;
    using Microsoft.VisualStudio.TestTools.UnitTesting;
    using SampleCopyObject;
    
    namespace SampleCopyObject.Test
    {
        [TestClass]
        public class UnitTestDeserialiser
        {
            [TestMethod]
            public void TestXml()
            {
                const string xmlFile = "http://www.dreamincode.net/forums/xml.php?showuser=1253";
                var client = new WebClient();
                var strObject = client.DownloadString(xmlFile);
                var result = strObject.DeserializeXml<ipb>();
                Assert.IsNotNull(result);
                Assert.IsNotNull(result.profile);
            }
            [TestMethod]
            public void TestJson()
            {
                const string jsonFile = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=test";
                var client = new WebClient();
                var strObject = client.DownloadString(jsonFile);
                var result = strObject.DeserializeJson<Rootobject>();
                Assert.IsNotNull(result);
                Assert.IsNotNull(result.responseData);
            }
        }
    }
Publicités

  1. Poster un commentaire

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :