Search code examples
c#jsonjavascriptserializer

How to parse json array with many nesting with JavaScriptSerializer


Right now my json looks easy and there is one object. suppose there would be many object in json then how could i parse it.

Now my json looks like

    var jsonText = @"{
        ""some_number"": 108.541, 
        ""date_time"": ""2011-04-13T15:34:09Z"", 
        ""serial_number"": ""SN1234"",
        ""more_data"": {
            ""field1"": 1.0,
            ""field2"": ""hello""
        }
    }";

i am parsing it this way

    var jss = new JavaScriptSerializer();
    var dict = jss.Deserialize<dynamic>(jsonText);

    Console.WriteLine(dict["some_number"]); 
    Console.WriteLine(dict["more_data"]["field2"]);
    Console.ReadLine();

when there will be nested object in each ordinal of json array then how could i parse with JavaScriptSerializer?

Suppose my json look bit complicated like below then how could i parse it by JavaScriptSerializer.

    var jsonText = @"data[
    {
        ""some_number"": 108.541, 
        ""date_time"": ""2011-04-13T15:34:09Z"", 
        ""serial_number"": ""SN1234"",
        ""more_data"": {
            ""field1"": 1.0,
            ""field2"": ""hello""
        },
        ""Hobbies"" : [""game1"",""game2"",""game3""]
    },
    {
        ""some_number"": 200.541, 
        ""date_time"": ""2012-04-11T15:34:09Z"", 
        ""serial_number"": ""SN3333"",
        ""more_data"": {
            ""field1"": 2.0,
            ""field2"": ""hello1""
        },
        ""Hobbies"" : [""game4"",""game5"",""game6""]
    }]";

    var jss = new JavaScriptSerializer();
    var dict = jss.Deserialize<dynamic>(jsonText);

    Console.WriteLine(dict["some_number"]); 
    Console.WriteLine(dict["more_data"]["field2"]);
    Console.ReadLine();

please tell me how could i parse the above json with JavaScriptSerializer. Thanks

EDIT

Change the json as per your guidance. now tell me does it look right?

    var jsonText = @"{ ""data""[
    {
        ""some_number"": 108.541, 
        ""date_time"": ""2011-04-13T15:34:09Z"", 
        ""serial_number"": ""SN1234"",
        ""more_data"": {
            ""field1"": 1.0,
            ""field2"": ""hello""
        },
        ""Hobbies"" : [""game1"",""game2"",""game3""]
    },
    {
        ""some_number"": 200.541, 
        ""date_time"": ""2012-04-11T15:34:09Z"", 
        ""serial_number"": ""SN3333"",
        ""more_data"": {
            ""field1"": 2.0,
            ""field2"": ""hello1""
        },
        ""Hobbies"" : [""game4"",""game5"",""game6""]
    }]}";

Solution

  • Your jsonText is not a valid json. You probably need something like:

    var jsonText = @"{
                      ""data"":[
                          {......
    

    make your json valid and the JavaScriptSerializer will work.

    Edit

    If I am guessing right,, your object needs to be

    var jsonText = @"{""data"":[
    {
        ""some_number"": 108.541, 
        ""date_time"": ""2011-04-13T15:34:09Z"", 
        ""serial_number"": ""SN1234"",
        ""more_data"": {
            ""field1"": 1.0,
            ""field2"": ""hello""
        },
        ""Hobbies"" : [""game1"",""game2"",""game3""]
    },
    {
        ""some_number"": 200.541, 
        ""date_time"": ""2012-04-11T15:34:09Z"", 
        ""serial_number"": ""SN3333"",
        ""more_data"": {
            ""field1"": 2.0,
            ""field2"": ""hello1""
        },
        ""Hobbies"" : [""game4"",""game5"",""game6""]
    }]}";
    

    so now you can access your object like...

    dict["data"]  //which is your array containing your two objects
    dict["data"][0]["some_number"] //eg first object property
    dict["data"][1]["more_data"]["field2"] //second object property...
    

    use your watch panel to debug your object.. You should create a model to cast your object into your models. Having unknown models should be avoided unless needed.