C#处理树结构数据,转换

C#处理数据为el-tree树结构

##本人之前已用前端实现,现在改为后端处理好返回给前端,这块的C#代码不会写

前端处理方式

      floorTreeDataLayering(list, rootValue) {
            var arr = [];
            list.forEach((item) => {
                if (item.pGlid === rootValue) {
                    const children = this.floorTreeDataLayering(list, item.glid);
                    if (children.length) {
                        item.children = children;
                    }
                    arr.push(item);
                }
            });
            return arr;
        },

后端已经查出来的数据

        public async Task<ActionResult<List<ModelTree>>> QueryTreeData()
        {
            var modelTreeResult = await _context.ModelTrees.ToListAsync();
            return modelTreeResult;

        }

部分数据样例

[
  {
    "id": 1,
    "glid": "1e1cf95b-0a01-459e-ba90-9264ec9a06c0",
    "pGlid": "0",
    "level": 0,
    "name": "LOWER LEVEL",
    "externalId": "0",
    "groupname": "",
    "modelName": "202208031330102658"
  },
  {
    "id": 2,
    "glid": "98df97fd-554a-40fe-9e9e-5028b9579542",
    "pGlid": "1e1cf95b-0a01-459e-ba90-9264ec9a06c0",
    "level": 1,
    "name": "墙",
    "externalId": "0",
    "groupname": "墙",
    "modelName": "202208031330102658"
  },
  {
    "id": 3,
    "glid": "0f3a6d04-cf9c-4ba7-99c5-ddb251d6a3a9",
    "pGlid": "98df97fd-554a-40fe-9e9e-5028b9579542",
    "level": 2,
    "name": "基本墙",
    "externalId": "0",
    "groupname": "墙",
    "modelName": "202208031330102658"
  }
]

现在实现的不对

private string ToMenuJson(List ModelTrees, string parentId)
        {
            var sbJson = new StringBuilder();
            sbJson.Append("[");
            var entitys = ModelTrees.FindAll(t => t.PGlid == parentId).ToList();
            if (entitys.Count > 0)
            {
                foreach (var item in entitys)
                {
                    var strJson = JsonConvert.SerializeObject(item, new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore });
                    strJson = strJson.Insert(strJson.Length - 1, ",\"ChildNodes\":" + ToMenuJson(ModelTrees, item.Glid) + "");
                    sbJson.Append(strJson + ",");
                }
                sbJson = sbJson.Remove(sbJson.Length - 1, 1);
            }
            sbJson.Append("]");
            return sbJson.ToString();
        }

想实现和前端一样的处理效果。