10

I'm having trouble understanding how to parse JSON string into c# objects with Visual .NET. The task is very easy, but I'm still lost... I get this string:

{"single_token":"842269070","username":"example123","version":1.1}

And this is the code where I try to desterilize:

namespace _SampleProject
{
    public partial class Downloader : Form
    {
        public Downloader(string url, bool showTags = false)
        {
            InitializeComponent();
            WebClient client = new WebClient();
            string jsonURL = "http://localhost/jev";   
            source = client.DownloadString(jsonURL);
            richTextBox1.Text = source;
            JavaScriptSerializer parser = new JavaScriptSerializer();
            parser.Deserialize<???>(source);
        }

I don't know what to put between the '<' and '>', and from what I've read online I have to create a new class for it..? Also, how do I get the output? An example would be helpful!

1
  • BTW, the JSON is most likely wrong. I doubt version is supposed to be a number. Commented May 3, 2012 at 13:48

7 Answers 7

9

Create a new class that your JSON can be deserialized into such as:

public class UserInfo
{
    public string single_token { get; set; }
    public string username { get; set; }
    public string version { get; set; }
}

public partial class Downloader : Form
{
    public Downloader(string url, bool showTags = false)
    {
        InitializeComponent();
        WebClient client = new WebClient();
        string jsonURL = "http://localhost/jev";
        source = client.DownloadString(jsonURL);
        richTextBox1.Text = source;
        JavaScriptSerializer parser = new JavaScriptSerializer();
        var info = parser.Deserialize<UserInfo>(source);

        // use deserialized info object
    }
}
Sign up to request clarification or add additional context in comments.

Comments

7

If you're using .NET 4 - use the dynamic datatype.

http://msdn.microsoft.com/en-us/library/dd264736.aspx

string json = "{ single_token:'842269070', username: 'example123', version:1.1}";

     JavaScriptSerializer jss = new JavaScriptSerializer();

     dynamic obj = jss.Deserialize<dynamic>(json);

     Response.Write(obj["single_token"]);
     Response.Write(obj["username"]);
     Response.Write(obj["version"]); 

2 Comments

Could you explain how exactly could that type be used here? Because Deserialize<dynamic>(source) won't have the desired effect.
@svick He wouldn't be able to use Deserialize<dynamic>. He would probably have to do something like what is discussed here stackoverflow.com/questions/3142495/…. He wouldn't have to create a strongly typed class in that case and just use the dynamic object like: var dynObject = parser.Deserialize(source, typeof(object); Then access the properties dynamically. dynObject.single_token, dynObject.username, etc.
2

Yes, you need a new class with properties that will match your JSON.

MyNewClass result = parser.Deserialize<MyNewClass>(source);

Comments

2

The usual way would be create a class (or a set of classes, for more complex JSON strings) that describes the object you want to deserialize and use that as the generic parameter.

Another option is to deserialize the JSON into a Dictionary<string, object>:

parser.Deserialize<Dictionary<string, object>>(source);

This way, you can access the data, but I wouldn't suggest you to do this unless you have to.

Comments

1

You need a Class that match with the JSON you are getting and it will return a new object of that class with the values populated.

Comments

0

Following is the code..

ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications);

        request = WebRequest.Create("https://myipaddress/api/admin/configuration/v1/conference/1/");

        request.Credentials = new NetworkCredential("admin", "admin123");
        // Create POST data and convert it to a byte array.
        request.Method = "GET";          

                // Set the ContentType property of the WebRequest.
        request.ContentType = "application/json; charset=utf-8";          


        WebResponse response = request.GetResponse();
        // Display the status.
        Console.WriteLine(((HttpWebResponse)response).StatusDescription);
        // Get the stream containing content returned by the server.
        dataStream = response.GetResponseStream();
        // Open the stream using a StreamReader for easy access.
        StreamReader reader = new StreamReader(dataStream);
        // Read the content.
        string responseFromServer = reader.ReadToEnd();
        JavaScriptSerializer js = new JavaScriptSerializer();
        var obj = js.Deserialize<dynamic>(responseFromServer);
        Label1.Text = obj["name"];
        // Display the content.
        Console.WriteLine(responseFromServer);
        // Clean up the streams.
        reader.Close();
        dataStream.Close();
        response.Close();

Comments

0
dynamic data = JObject.Parse(jsString);
var value= data["value"];

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.