繁体   English   中英

JSon .net 核心中的 JSon

[英]JSon within a JSon .net core

我是 .net 核心编程的新手。

我需要在 .net 核心 MVC 中的 Json 对象中返回一个 Json 对象。 我想返回一个列表时间表和属于该时间表的团队的信息。

截至目前,我正在使用此代码获得此输出。

对于时间表:

控制器中的代码

 [HttpGet]
 public async Task<List<Schedules>> getAllScheds(){
     return await _context.Schedules.ToListAsync();
 }

输出

 [
     {
         "scheduleId": 43,
         "teamId1": 1,
         "teamId2": 3,
         "scheduleDate": "2016-04-30T19:00:00",
         "week": "1",
         "stadiumId": 3,
         "createdBy": null,
         "createdDate": "2016-07-07T13:09:32.797"
     },
     {
         "scheduleId": 44,
         "teamId1": 7,
         "teamId2": 6,
         "scheduleDate": "2016-05-01T16:00:00",
         "week": "1",
         "stadiumId": 6,
         "createdBy": null,
         "createdDate": "2016-07-07T13:13:10.183"
     },
     {
         "scheduleId": 45,
         "teamId1": 2,
         "teamId2": 4,
         "scheduleDate": "2016-05-02T22:00:00",
         "week": "1",
         "stadiumId": 4,
         "createdBy": null,
         "createdDate": "2016-07-07T13:16:23.337"
     }
 ]

团队信息

控制器中的代码

 [HttpGet]
 public async Task<List<Teams>> getAllTeamsInfo(){
     return await _context.Teams.ToListAsync();
 }

输出

 [
     {
         "teamId": 1,
         "city": "Virginia",
         "teamName": "Armada",
         "sImage": "/images/teams-logo-small/virginia.png"
         "createdBy": null,
         "createdDate": "2016-06-22T10:03:35.58"
     },
     {
         "teamId": 2,
         "city": "Arkansas",
         "teamName": "Attack",
         "sImage": "/images/teams-logo-small/arkansas.png"
         "createdBy": null,
         "createdDate": "2016-06-22T10:03:35.58"
     },
     {
         "teamId": 3,
         "city": "Florida",
         "teamName": "Fusion",
         "sImage": "/images/teams-logo-small/florida.png"
         "createdBy": null,
         "createdDate": "2016-06-22T10:03:35.58",
         "modifiedBy": null
     }
 ]

现在我想合并它们并有这个输出

 [
     {
         "scheduleId": 43,
         "teamId1": [{
                      "teamId": 1,
                      "city": "Virginia",
                      "teamName": "Armada",
                      "sImage": "/images/teams-logo-small/virginia.png"
                      "createdBy": null,
                      "createdDate": "2016-06-22T10:03:35.58"
                     }],
         "teamId2":  [{
                      "teamId": 3,
                      "city": "Florida",
                      "teamName": "Fusion",
                      "sImage": "/images/teams-logo-small/florida.png"
                      "createdBy": null,
                      "createdDate": "2016-06-22T10:03:35.58",
                      "modifiedBy": null
                     }],
         "scheduleDate": "2016-04-30T19:00:00",
         "week": "1",
         "stadiumId": 3,
         "createdBy": null,
         "createdDate": "2016-07-07T13:09:32.797"
     },
     {
         "scheduleId": 44,
         "teamId1":  [{
                      "teamId": 7,
                      "city": "Oklahoma",
                      "teamName": "Nation",
                      "sImage": "/images/teams-logo-small/oklahoma.png",
                      "createdBy": null,
                      "createdDate": "2016-06-22T10:03:35.58"
                     }],
         "teamId2": [{
                      "teamId": 6,
                      "city": "Texas",
                      "teamName": "Independence",
                      "sImage": "/images/teams-logo-small/texas.png",
                      "createdBy": null,
                      "createdDate": "2016-06-22T10:03:35.58"
                    }],
         "scheduleDate": "2016-05-01T16:00:00",
         "week": "1",
         "stadiumId": 6,
         "createdBy": null,
         "createdDate": "2016-07-07T13:13:10.183"
     },
     {
         "scheduleId": 45,
         "teamId1": [{
                      "teamId": 2,
                      "city": "Arkansas",
                      "teamName": "Attack",
                      "sImage": "/images/teams-logo-small/arkansas.png",
                      "createdBy": null,
                      "createdDate": "2016-06-22T10:03:35.58"
                    }],
         "teamId2": [{
                      "teamId": 4,
                      "city": "Oregon",
                      "teamName": "Crash",
                      "sImage": "/images/teams-logo-small/oregon.png",
                      "createdBy": null,
                      "createdDate": "2016-06-22T10:03:35.58",
                    }],
         "scheduleDate": "2016-05-02T22:00:00",
         "week": "1",
         "stadiumId": 4,
         "createdBy": null,
         "createdDate": "2016-07-07T13:16:23.337"
     }
 ]

我想返回整个团队信息而不是团队 ID。

非常感谢。

如果您的 Schedules 模型中没有 Team 导航属性,则必须先添加它们:

public class Schedules {
    [ForeignKey("Team1Id")]
    public Team Team1 {get;set;}

    [ForeignKey("Team2Id")]
    public Team Team2 {get;set;}
}

然后您可以在查询中使用 Include(s=>s.Team1).ThenInclude(s=>s.Team2) 。

另一种方法是创建一个代表您想要的值的新模型。 这将是您的控制器方法的结果。 例如:

public class ScheduleDTO:Schedule {
    public Team Team1 {get;set;}
    public Team Team2 {get;set;}
}

在请求中,您为每个计划选择这个新模型:

[HttpGet]
public async Task<List<ScheduleDTO>> getAllScheds(){
    return await _context.Schedules.Select(s=>new ScheduleDTO() {
        scheduleId: s.Id,
        teamId1: s.Team1Id,
        teamId2: s.Team2Id,
        scheduleDate: "2016-04-30T19:00:00",
        week: "1",
        stadiumId: 3,
        createdBy: null,
        createdDate: "2016-07-07T13:09:32.797",
        Team1:s.Team1,
        Team2:_context.Teams.FirstOrDefault(x=>x.Id==s.Team1Id) //not recommended
    });
}  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM