【问题标题】:Add arrays to a higher dimension array将数组添加到更高维数组
【发布时间】:2018-08-14 13:48:35
【问题描述】:

我正在创建一个从网站获取信息和下载电影的应用程序。我已经成功地将信息设置在不同的数组中,并将它们组合到一个数组中。

但是,现在我试图将该数组放入一个更大的数组中(想要使用 JSON),但这是失败的。

我当前的 Json 输出如下所示:

 {"moviedata": 
    ["http:/xxxx","title title ","k0X0HrYtMm5u"],"tags": 
    ["x","x","x","Prop","x","x","x","x","x","x","x"],"categorydata": 
    ["x","x","x"]}

通过以下代码实现:

Dictionary<string, string[]> movie = new Dictionary<string, string[]>();

moviedata.Add("moviedata", moviegenerala);
moviedata.Add("tags", tagsa);
moviedata.Add("categorydata", categoriesa);
string moviejson = JsonConvert.SerializeObject(moviedata);

我想在此之上添加另一个图层,因此有一个名为“电影”的常规选项卡,并且对于每部电影,它都有此信息。我该怎么做?

更新: 添加此代码:

var myShape = new
    {
        Movie = new Dictionary<string, string[]>
        {
            ["moviedata"] = moviegenerala,
            ["tags"] = tagsa,
            ["categorydata"] = categoriesa,
            ["localdata"] = localdataa
        }
    };
    var moviejson = JsonConvert.SerializeObject(myShape);

JSON 似乎是正确的,但它无法解析,在第一个列表之后它说在右括号后面有文本。

更新: 将代码更改为:

Dictionary<string, string[]> movies = new Dictionary<string, string[]>();
                                var myShape = movies.Select(m => new
                                {
                                    Movie = new Dictionary<string, string[]>
                                    {
                                        // TODO - you'll need to get the appropriate data for this movie
                                        ["moviedata"] = moviegenerala,
                                        ["tags"] = tagsa,
                                        ["categorydata"] = categoriesa,
                                        ["localdata"] = localdataa
                                    }

                                });

                                var moviejson = JsonConvert.SerializeObject(myShape);
                                File.AppendAllText("moviedata.txt", moviejson);

但现在它只给出空括号:(

【问题讨论】:

    标签: c# arrays json


    【解决方案1】:

    如果这是一次性序列化,那么最简单的方法就是用匿名类包装 Dictionary,添加额外的属性缩进,例如

    var myShape = new 
    {
         Movie = new Dictionary<string, string[]>
         {
             ["moviedata"] = moviegenerala,
             ["tags"] = tagsa,
             ["categorydata"] = categoriesa
         }
    };
    var moviejson = JsonConvert.SerializeObject(myShape);
    

    但是,如果您的代码中的多个位置都需要相同的形状,那么我建议您为您的“形状”创建一个完全成熟的类。

    编辑:

    上面生成的json是

    {
      "Movie": {
        "moviedata": [ "http:/xxxx", "title title ", "k0X0HrYtMm5u" ],
        "tags": [ "x", "x", "x", "Prop", "x", "x", "x", "x", "x", "x", "x" ],
        "categorydata": [ "x", "x", "x" ]
      }
    }
    

    如果您需要映射多个电影,然后进行投影,则可以使用.Select

    // TODO : Replace this with your actual current movies
    var inMovies = new[] {new Movie{...},new Movie {...}, ...};
    var myShape = inMovies.Select(m => new
    {
        Movie = new Dictionary<string, string[]>
        {
            // TODO - you'll need to get the appropriate data for this movie, e.g. m.moviegenerala
            ["moviedata"] = moviegenerala, 
            ...
        }
    });
    

    产生以下内容:

    [
      {
        "Movie": {
          "moviedata": [ "http:/xxxx", "title title ", "k0X0HrYtMm5u" ],
          "tags": [ "x", "x", "x", "Prop", "x", "x", "x", "x", "x", "x", "x" ],
          "categorydata": [ "x", "x", "x" ]
        }
      },
      {
        "Movie": {
          "moviedata": [ "http:/xxxx", "title title ", "k0X0HrYtMm5u" ],
          "tags": [ "x", "x", "x", "Prop", "x", "x", "x", "x", "x", "x", "x" ],
          "categorydata": [ "x", "x", "x" ]
        }
      }
    ]
    

    【讨论】:

    • 我冒昧地使用了更简洁的C#6 dictionary initializer syntax
    • 我试过这个,它似乎对第一个值工作正常。但是,添加的后续电影不再解析为有效的 JSON,在最后一个右括号后显示文本..
    • 现在只给出空括号:(
    • 我们在这里完全想念彼此。您还没有真正显示您的输入数据。 inMovies 参数代表您想要重塑的现有电影数据集合。
    • 嗯,但在运行开始时没有电影数据.. 一切都是新鲜的,每部电影都应该只添加一次
    猜你喜欢
    • 2019-07-23
    • 2012-01-01
    • 2019-06-18
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-22
    相关资源
    最近更新 更多