2010-08-02 5 views
11

Je sais que vous pouvez désérialiser un objet JSON à partir d'un HttpWebResponse en utilisant le WebClient.DownloadString() mais qu'en est-il de l'inverse? J'ai regardé les pages MSDN et je ne sais pas si vous pouvez sérialiser des objets JSON ou non, quelqu'un le sait?Utilisation de WebClient pour la sérialisation JSON?

+0

Pouvez-vous fournir un code de pseudo exemple montrant ce que vous essayez de faire avec la classe WebClient? –

+0

Sérialiser JSON afin que je puisse l'envoyer via un HttpRequest pour la consommation de permet de dire un .ascx ou même en dehors de .NET. Je veux juste savoir si c'est possible c'est tout. Je ne vois pas un moyen. – PositiveGuy

+0

J'ai mis à jour ma réponse, j'espère que cela aidera. –

Répondre

30

Je pense que vous devrez peut-être sérialiser l'objet en JSON avant d'utiliser l'instance WebClient. Espérons que cela aide

var url = "..."; 
var json = JsonHelper.ToJson(myObject); 

var response = PostJson(url, json); 

Voici un exemple d'envoyer des données JSON de la classe WebClient:

public static string PostJson(string url, string data) 
{ 
    var bytes = Encoding.Default.GetBytes(data); 

    using (var client = new WebClient()) 
    { 
     client.Headers.Add("Content-Type", "application/json"); 
     var response = client.UploadData(url, "POST", bytes); 

     return Encoding.Default.GetString(response); 
    } 
} 

Voici une simple classe d'aide qui utilise la classe DataContractJsonSerializer de sérialisation/objet deserialize vers et à partir 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

Oui, mais je pose des questions sur l'objet WebClient ici. J'essayais de comprendre si c'était possible mais je ne vois rien qui parle de cet objet capable de sérialiser ... seulement de le désérialiser. – PositiveGuy

+0

+1 .. Merci .. Votre Ans m'a aidé ... – RajeshKdev

4

J'utilise:

var json = new JavaScriptSerializer().Serialize(yourObject); 
+0

Serait agréable d'élaborer sur le downvote – Guillaume86

Questions connexes