簡體   English   中英

如何在C#中將JSON字符串格式化為樹格式

[英]How to format a json string as tree format in c#

我有來自Mongo數據庫的數據列表。 內容為JSON格式。 它是一個對象數組,值彼此之間具有父級關系。父級為null(“”)的對象表示它是根節點。

[  
   {  
      "_id":"5c04fc163838b0772dd9636d",
      "Company":"TESTCOMPANY",
      "id":"test_uk",
      "parent":""
   },
   {  
      "_id":"5c05181f0ab89a44a969015d",
      "Company":"TESTCOMPANY",
      "id":"Gateway",
      "parent":"test_uk"
   },
   {  
      "_id":"5c0518723838b0772dd9678e",
      "Company":"TESTCOMPANY",
      "id":"Device1",
      "parent":"Gateway"
   },
{  
      "_id":"5c0518723838b077789636e",
      "Company":"TESTCOMPANY",
      "id":"Device2",
      "parent":"Gateway"
   },
   {  
      "_id":"5c0518723838b0772dd9636e34",
      "Company":"TESTCOMPANY",
      "id":"Adapter",
      "parent":"test_uk"
   },
      {  
      "_id":"5c0518723838b0772dd9636e",
      "Company":"TESTCOMPANY",
      "id":"AdapterDevice",
      "parent":"Adapter"
   },

   {  
      "_id":"5c04fc163838b0772dd93454d",
      "Company":"TESTCOMPANY",
      "id":"test_us",
      "parent":""
   },
   {  
      "_id":"5c0518723838b0772dd9636e",
      "Company":"TESTCOMPANY",
      "id":"Device",
      "parent":"test_us"
   }
]

是否可以在c#中轉換為父子格式?

預期格式

[  
   {  
      "_id":"5c04fc163838b0772dd9636d",
      "Company":"TESTCOMPANY",
      "id":"test_uk",
      "children":[
             {  
                 "_id":"5c05181f0ab89a44a969015d",
                  "Company":"TESTCOMPANY",
                  "id":"Gateway",
                  "children":[
                      {  
                       "_id":"5c0518723838b0772dd9678e",
                       "Company":"TESTCOMPANY",
                       "id":"Device1"
                      },
                     {  
                      "_id":"5c0518723838b077789636e",
                      "Company":"TESTCOMPANY",
                      "id":"Device2"
                       }
                    ]
               },
        {  
           "_id":"5c0518723838b0772dd9636e34",
           "Company":"TESTCOMPANY",
           "id":"Adapter",
        "children":[  {  
             "_id":"5c0518723838b0772dd9636e",
             "Company":"TESTCOMPANY",
             "id":"AdapterDevice"
            }]
       }]},
     {  
      "_id":"5c04fc163838b0772dd93454d",
      "Company":"TESTCOMPANY",
      "id":"test_us",
  "children":[{
      "_id":"5c0518723838b0772dd9636e",
      "Company":"TESTCOMPANY",
      "id":"Device",
      "parent":"test_us"
     }]
    }
]

我只想在Web Ui中顯示這種格式的樹strucutre

我不確定它是否足夠快,但是可能是一種解決方案:

using System.Collections.Generic;
using Newtonsoft.Json;

namespace ConsoleApp1
{
    class Program
    {
        public class Item
        {
            [JsonProperty("_id")]
            public string Guid { get; set; }

            [JsonProperty(PropertyName = "company")]
            public string Company { get; set; }

            [JsonProperty(PropertyName = "id")]
            public string Id { get; set; }

            [JsonProperty(PropertyName = "parent")]
            public string Parent { get; set; }

            [JsonProperty(PropertyName = "children")]
            public List<Item> Children { get; set; }
        }


        private static string jsonString = "[{\"_id\":\"5c04fc163838b0772dd9636d\",\"Company\":\"TESTCOMPANY\",\"id\":\"test_uk\",\"parent\":\"\"},{\"_id\":\"5c05181f0ab89a44a969015d\",\"Company\":\"TESTCOMPANY\",\"id\":\"Gateway\",\"parent\":\"test_uk\"},{\"_id\":\"5c0518723838b0772dd9678e\",\"Company\":\"TESTCOMPANY\",\"id\":\"Device1\",\"parent\":\"Gateway\"},{\"_id\":\"5c0518723838b077789636e\",\"Company\":\"TESTCOMPANY\",\"id\":\"Device2\",\"parent\":\"Gateway\"},{\"_id\":\"5c0518723838b0772dd9636e34\",\"Company\":\"TESTCOMPANY\",\"id\":\"Adapter\",\"parent\":\"test_uk\"},{\"_id\":\"5c0518723838b0772dd9636e\",\"Company\":\"TESTCOMPANY\",\"id\":\"AdapterDevice\",\"parent\":\"Adapter\"},{\"_id\":\"5c04fc163838b0772dd93454d\",\"Company\":\"TESTCOMPANY\",\"id\":\"test_us\",\"parent\":\"\"},{\"_id\":\"5c0518723838b0772dd9636e\",\"Company\":\"TESTCOMPANY\",\"id\":\"Device\",\"parent\":\"test_us\"}]";

        static void Main(string[] args)
        {
            var items =  JsonConvert.DeserializeObject<List<Item>>(jsonString);

            var dictionary = new Dictionary<string, Item>();

            foreach (var item in items)
            {
                if (!dictionary.ContainsKey(item.Parent))
                {   
                    dictionary.Add(item.Id, item);
                }
                else
                {
                    if (dictionary[item.Parent].Children == null)
                        dictionary[item.Parent].Children = new List<Item>();
                    dictionary[item.Parent].Children.Add(item);
                }
            }

            string json = JsonConvert.SerializeObject(dictionary, Formatting.Indented);

            System.Console.WriteLine(json);

            System.Console.ReadLine();
        }
    }
}

我剛剛制作了一個使用Newtonsoft.Json庫的簡單控制台應用程序。 我認為它是最經常用於這種目的的。

您必須自己找到如何刪除結果中的父屬性,但是我想這應該沒什么大不了的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM