2010-08-02 29 views
11

Sé que puede deserializar un objeto JSON de un HttpWebResponse usando el WebClient.DownloadString(), pero ¿qué pasa al revés? Miré las páginas de MSDN y no sé si puedes serializar objetos JSON o no, ¿alguien lo sabe?¿Cómo usar WebClient para la serialización JSON?

+0

¿Puede dar algunos pseudo código de ejemplo que muestra lo que está tratando de hacer con la clase WebClient? –

+0

Serialize JSON para que pueda enviarlo a través de HttpRequest para el consumo de, digamos, un .ascx o incluso fuera de .NET. Solo quiero saber si es posible, eso es todo. No veo la manera. – PositiveGuy

+0

He actualizado mi respuesta, espero que esto ayude. –

Respuesta

30

Creo que puede que tenga que serializar el objeto en JSON antes de usar la instancia de WebClient. Espero que esto ayude

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

var response = PostJson(url, json); 

Aquí está un ejemplo de envío de datos JSON de la clase 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); 
    } 
} 

Aquí es una clase de ayuda sencilla que utiliza la clase DataContractJsonSerializer para serializar/objeto deserializar desde y hacia 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

Sí, pero estoy preguntando sobre el objeto WebClient aquí. Estaba tratando de averiguar si es posible, pero no veo nada por ahí hablando de que ese objeto pueda serializar ... solo deserializar. – PositiveGuy

+0

+1 .. Gracias ... Su respuesta me ayudó ... – RajeshKdev

4

que utilizo:

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

Sería bueno elaborar sobre el voto en voz baja – Guillaume86

Cuestiones relacionadas