使用 c# --> asp.net web api 在 json 中获取分层输出

Posted

技术标签:

【中文标题】使用 c# --> asp.net web api 在 json 中获取分层输出【英文标题】:get hierarchical output in json using c# --> asp.net web api 【发布时间】:2021-11-30 20:50:44 【问题描述】:

我想使用 C#(ASP.NET Web Api) 在 JSON 输出中创建员工和经理的层次结构树。我使用了 EntityFramework。

我的获取 api 代码是 -

[Route("empLevel/id")]
public IActionResult GetEmpHierarchy(int id)

    try
    
        if (id == 0)
        
            return NotFound();
        
        var query_hierarchy = entity.EmployeeHierarchies.FromSqlInterpolated($"EXECUTE dbo.FindHierarchy id").ToList();
        
        return Ok(query_hierarchy);
    
    catch (Exception ex)
    
        Console.WriteLine(ex.StackTrace);
    
    return NotFound();

EmployeeHierarchy 类的代码是-

public class EmployeeHierarchy
    

            public int Id  get; set; 
            public int? MngId  get; set; 
            public string Path  get; set; 
            public string Name  get; set; 
            public string FullPath  get; set; 
            public int Level  get; set; 
            public double Grade  get; set; 
    

我在从数据库获取输出的过程中使用了 CTE-

ALTER PROCEDURE [dbo].[FindHierarchy]
@empId int = null
AS
BEGIN
    with cte as(
                select Id, MngId, CAST('' AS VARCHAR(40)) ManagerName, Path = cast('' as varchar(40)),Name, Level = 0,Grade       
                from Employee    
                where MngId is null

                union all 

                select EmpId     =  e.Id, ParentId  =  e.MngId,
                        CAST(cte.Name AS VARCHAR(40)) ManagerName,
                        Path      =  cast(concat(cte.Path, cte.Name, ' -› ') as varchar(40)),
                        Name      =  e.Name,        
                        Level     =  cte.Level + 1,
                        Grade = e.Grade
                    from 
                        Employee e
                        inner join cte on cte.Id = e.MngId
            )
                select 
                    Id      ,
                    MngId  ,
                    ManagerName,
                    Path       ,
                    Name       ,
                    FullPath   =  Path + Name,    
                    Level, Grade        
                from cte where ID=@empId
                order by FullPath   ;
END

目前我的输出如下:

[
   
      "id":2,
      "mngId":3,
      "name":"Blake",
      "fullPath":"Diana › Chelsa › Blake",
      "level":2,
      "grade":3.2
   
]

我想显示为-

    [
   
      "id":2,
      "mngId":3,
      "name":"Diana",
      "level":2,
      "grade":5.2[
         
            "id":2,
            "mngId":3,
            "name":"Chelsa",
            "level":2,
             "grade":5.1[
               
                  "id":2,
                  "mngId":3,
                  "name":"Diana",
                  "level":2,
                  "grade":3.2[]
                
             ]
        
    ]  
  
]
                 

我是 asp.net web api 的新手,请为我的查询建议一些代码。谢谢!!

【问题讨论】:

我需要查看实体 EmployeeHierarchies 以向您发送适当的解决方案 @Almaran 我已经添加了代码和数据库代码!! 【参考方案1】:

您的 EmployeeHierarchy 应该如下所示

public class EmployeeHierarchy


        public int Id  get; set; 
        public int? MngId  get; set; 
        public string Path  get; set; 
        public string Name  get; set; 
        public string FullPath  get; set; 
        public int Level  get; set; 
        public double Grade  get; set; 
        public EmployeeHierarchy ChildEmployee  get; set; 

这是我能看到的唯一方式。 您也必须编辑您的 SQL 以匹配此模型。

【讨论】:

以上是关于使用 c# --> asp.net web api 在 json 中获取分层输出的主要内容,如果未能解决你的问题,请参考以下文章

重用令牌 asp.net web api c#

如何在asp.net c#的web配置文件中设置起始页

asp.net(c#)如何上传大文件?

如何在asp.net c# web应用程序中使用asp.net vb页面

ASP.NET C#中Radiobutton控件的疑问

asp.net web服务应用程序问题 高手速进 c#