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

How to parse json array with many nesting with 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""]
    }]}";

您的json文本无效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...

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

我整理问题。 @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();