【问题标题】:c# JSON Directly Nested Arraysc# JSON 直接嵌套数组
【发布时间】:2017-03-24 17:18:48
【问题描述】:

我正在使用 RESTful api 并尝试处理返回的数据。数据本身由数组中的 json 数组组成。

{
  "category1": [
    [
      "http://url1",
      "URL 1 Title"
    ],
    [
      "http://url2",
      "URL 2 Title"
    ]
  ],
  "category2": [
    [
      "http://url3",
      "URL 3 Title"
    ]
  ],
  "category3": [
    [
      "http://url4",
      "URL 4 Title"
    ]
  ]
}

我创建了一个映射到上述内容的类,但我不知道如何解析结果并提取单个 URL 和 URL 标题。

如果这些是对象,我可以看到我会怎么做,但不知道如何直接访问嵌套数组。

【问题讨论】:

  • 你可以这样做:var objectOfYourClass = JsonConvert.DeserializeObject<YourClass>(jsonString)
  • JSON 的结果将是一个具有三个属性的对象,而不是一个具有三个对象的数组。
  • 请添加您当前的代码
  • 请在此处找到我的示例代码:dotnetfiddle.net/KM66mQ

标签: c# arrays json json.net


【解决方案1】:

试试这个

class Output
{
     public string[][] category1 { get; set; }
     public string[][] category2 { get; set; }
     public string[][] category3 { get; set; }
}

class OutputCategory
{
     public string uri { get; set; }
     public string label { get; set; }
}

我已将您在main()方法中的代码修改为如下。

 string samplejson =
            @"{'category1':[['http://url1','URL 1 Title'],['http://url2','URL 2 Title']],'category2':[['http://url3','URL 3 Title']],'category3':[['http://url4','URL 4 Title']]}";

        //deserialised to my class object
        var result = JsonConvert.DeserializeObject<Output>(samplejson);

        //create new output object
        Output outCat = new Output();

        //I now want to assign the appropriate values to my new output object

        Console.WriteLine(result.category2.Length);
        Console.WriteLine("URL: " + result.category1[0][0]);
        Console.WriteLine("Title: " + result.category1[0][1]);

确保您检查数组的长度,然后继续处理您的结果。

【讨论】:

  • 非常感谢您的帮助!
  • +1 是如何访问更深嵌套数组的一个很好的例子。大多数示例都以数组或对象开头,然后将其保留。
【解决方案2】:

我在我的代码中使用这个,在你创建了 YourModel 类之后,你可以使用下面的方法

 JsonConvert.DeserializeObject<YourModel>(content,
                                        new JsonSerializerSettings
                                        {
                                           ReferenceLoopHandling = ReferenceLoopHandling.Ignore
                                        });

【讨论】:

    【解决方案3】:

    你想拥有jagged arrays:

    public class Model
    {
        public string[][] category1 { get; set; }
        public string[][] category2 { get; set; }
        public string[][] category3 { get; set; }
    }
    

    然后:

    var model = JsonConvert.DeserializeObject<Model>(json);
    
    foreach (var element in model.category1)
    {
        var url = element[0];
        var title = element[1];
    }
    

    【讨论】:

    • 非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2017-07-25
    • 2021-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多