12

I know you can deserialize a JSON object from an HttpWebResponse using the WebClient.DownloadString() but what about the other way around? I've looked at the MSDN pages and I don't know if you can serialize to JSON objects or not, anyone know?

Musakkhir Sayyed
  • 7,012
  • 13
  • 42
  • 65
PositiveGuy
  • 46,620
  • 110
  • 305
  • 471
  • Can you provide some sample pseudo code showing what you are trying to do with the WebClient class? – Wallace Breza Aug 02 '10 at 21:37
  • Serialize JSON so that I can send it via an HttpRequest for consumption of lets say an .ascx or even outside .NET. Just want to know if it's possible that's all. I don't see a way. – PositiveGuy Aug 02 '10 at 21:39

2 Answers2

30

I think you may just have to serialize the object into JSON before using the WebClient instance. Hope this helps

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

var response = PostJson(url, json);

Here's an example of sending JSON data from the WebClient class:

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);
    }
}

Here is a simple helper class that uses the DataContractJsonSerializer class to serialize / deserialize object to and from 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);
        }
    }
}
Wallace Breza
  • 4,898
  • 1
  • 28
  • 33
  • Yes, but I'm asking about the WebClient object here. I was trying to figure out if it's possible but do not see anything out there talking about that object being able to serialize...only deserialize. – PositiveGuy Aug 02 '10 at 21:35
3

I use :

var json = new JavaScriptSerializer().Serialize(yourObject);
Guillaume86
  • 14,341
  • 4
  • 53
  • 53