如何使用JavaScriptSerializer解析许多嵌套的json数组

时间:2018-05-21 09:44:08

标签: c# json javascriptserializer

现在我的json看起来很简单,并且有一个对象。假设json中会有很多对象,那么我该如何解析呢。

现在我的json看起来像

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

我正在以这种方式解析它

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

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

当json数组的每个序数都有嵌套对象时,我怎么能用JavaScriptSerializer解析?

假设我的json看起来像下面那样复杂,那我怎么能用 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();

请告诉我如何使用JavaScriptSerializer解析上面的json。感谢

修改

根据您的指导更改json。现在告诉我它看起来不错吗?

    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""]
    }]}";

2 个答案:

答案 0 :(得分:1)

您的jsonText不是有效的json。你可能需要这样的东西:

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

使你的json有效,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""]
}]}";

所以现在你可以像...一样访问你的对象了。

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...

使用您的手表面板调试您的对象..您应该创建一个模型将您的对象投射到您的模型中。除非需要,否则应避免使用未知模型。

答案 1 :(得分:0)

我解决了这个问题。 @itdoesntwork提示确实帮我修复了json错误。 在这里,我将分享我的代码以展示我是如何做到的。

请添加System.Web.Extensions的引用,并使用顶部的System.Web.Script.Serialization;添加此命名空间

    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["data"][0]["some_number"]);
    Console.WriteLine(dict["data"][0]["more_data"]["field2"]);

    Console.WriteLine(dict["data"][1]["some_number"]);
    Console.WriteLine(dict["data"][1]["more_data"]["field2"]);
    Console.WriteLine(dict["data"][1]["Hobbies"][1]);

    Console.ReadLine();