2010-08-02 5 views
2

J'essaie de ne pas dépendre des bibliothèques open source ou tierces telles que Json.NET pour analyser JSON entrant à partir d'un HttpWebResponse. Pourquoi? Parce que plus vous dépendez des frameworks open source pour faciliter vos implémentations, plus votre application doit dépendre de ces dépendances ... Je n'aime pas que mes applications soient dépenantes sur beaucoup de bibliothèques pour de nombreuses raisons, si possible. Je suis d'accord avec des choses comme la bibliothèque d'entreprise, car elle est prise en charge par MS, mais je prends plus de bibliothèques open source.Façon de désérialiser JSON de HttpWebResponse sans cadres tiers

Quoi qu'il en soit, j'essaie de trouver la meilleure façon d'analyser le côté serveur JSON entrant dans .NET 3.5.

Je sais que cela va recevoir beaucoup de réponses et j'ai même utilisé .NET 3.5 JavaScriptSerializer pour sérialiser les données en JSON mais maintenant j'essaie de trouver la meilleure façon de faire le reverse sans encore, avoir à utiliser un cadre tiers/open source pour aider à cela.

Répondre

10

Le Microsoft recommandé JSON sérialiseur est DataContractJsonSerializer Cette classe existe dans le System.Runtime.Serialization Assemblée

L'exemple démontre désérialisation à partir des données JSON dans un objet.

MemoryStream stream1 = new MemoryStream();  
Person p2 = (Person)ser.ReadObject(stream1); 

sérialiser un exemple du type de personne à JSON, créez la première DataContractJsonSerializer et utiliser la méthode WriteObject pour écrire des données JSON à un flux.

Person p = new Person(); 
//Set up Person object... 
MemoryStream stream1 = new MemoryStream(); 
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Person)); 
ser.WriteObject(stream1, p); 

Mise à jour: Ajouté Classe d'assistance

Voici une classe d'aide exemple que vous pouvez utiliser pour simple à/De sérialisation JSON:

public static class JsonHelper 
{ 
    public static string ToJson<T>(T instance) 
    { 
     var serializer = new DataContractJsonSerializer(typeof(T)); 
     using (var tempStream = new MemoryStream()) 
     { 
      serializer.WriteObject(tempStream, instance); 
      return Encoding.Default.GetString(tempStream.ToArray()); 
     } 
    } 

    public static T FromJson<T>(string json) 
    { 
     var serializer = new DataContractJsonSerializer(typeof(T)); 
     using (var tempStream = new MemoryStream(Encoding.Unicode.GetBytes(json))) 
     { 
      return (T)serializer.ReadObject(tempStream); 
     } 
    } 
} 
+0

Auriez-vous de savoir quand cette classe a été créé? Je me demande si c'est une classe de framework plus récente que celle de .NET 3.5. Parce que je préférerais aller avec ce qui est le plus récent, car il ne sera probablement pas obsolète dès que ... ou pas du tout. – PositiveGuy

+0

@CoffeeAddict, j'ai ajouté un exemple de classe d'assistance qui fournit à la fois la sérialisation et la désérialisation. –

+0

où avez-vous vu que la MS recommande ce .. je suis sur MSDN mais ne vois pas cela. – PositiveGuy

Questions connexes