【问题标题】:Dynamically Adding to JArray generates repeated data动态添加到 JArray 生成重复数据
【发布时间】:2019-06-27 02:06:22
【问题描述】:

当我写这段代码时:

   string[] title= {"title1","title2","title3","title4"};
   int[] iid= {124,122,333,234};

   dynamic bucket = new JObject();
   bucket.bucket = "Parking Lot";
   bucket.roadmap = new JArray();

   dynamic issue = new JObject();
   dynamic json2 = new JArray(bucket);

   for(int i=0; i<title.Length; i++) {
        issue.title = title[i];
        issue.iid = iid[i];
        issue.order = i;
        bucket.roadmap.Add(issue);
   }

   Console.WriteLine(json2.ToString());

我的结果是:

   [
     {
       "bucket": "Parking Lot",
       "roadmap": [
         {
           "title": "title4",
           "iid": 234,
           "order": 3
         },
         {
           "title": "title2",
           "iid": 122,
           "order": 1
         },
         {
           "title": "title3",
           "iid": 333,
           "order": 2
         },
         {
           "title": "title4",
           "iid": 234,
           "order": 3
         }
       ]
     }
   ]

第一个和最后一个“路线图”JObjects 重复了。有没有一种方法可以动态生成这个 JSON 以及我想要传递的唯一值?

我也尝试过以非动态方式进行。

    JArray bucket = new JObject();
    bucket.Add("bucket","Parking Lot");
    bucket.Add("order", new JArray());

    JObject issue = new JObject();
    ...

但我找不到选择“bucket.order.Add”向该 JArray 添加问题的方法。

最后,我只是想用一堆数据循环一个 JArray,我想将它与它们的存储桶类型分开,提取每个问题值并将其存储在一个新的 JSON 中,结构如下所示。

谢谢

【问题讨论】:

    标签: c# json


    【解决方案1】:

    在添加到数组之前创建一个新的问题对象。

       for(int i=0; i<5; i++) {
            issue = new JObject();
            issue.title = "Elbow\"";
            issue.iid = 123;
            issue.order = i;
            bucket.roadmap.Add(issue);
       }
    

    【讨论】:

    • 看到解决方案如此简单,我感到很愚蠢......非常感谢
    • 什么?我觉得这非常令人惊讶。为什么原始版本只重复“4”?需要一个解释,你不觉得吗?项目的重复发生了一些意想不到的事情。例如,不必每次都创建一个新的JObject,您只需将Add 移动到循环顶部并在添加后设置其属性即可。这有助于揭示正在发生的一些“魔法”。我希望有一个更大、更详细的解释。
    • 就好像该对象只有在列表中已经存在的情况下才被复制,否则就按原样添加并且对该对象的引用仍然有效(添加后可以更改其属性。 )
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 2017-01-22
    相关资源
    最近更新 更多