【发布时间】:2013-06-28 08:25:21
【问题描述】:
我正在使用Web-API GET 为报告返回 JSON。
GET 方法返回一个简单的db.Reports.ToList();
这是我检索到的数据的转储
{
"Project": {
"Location": {
"LocationId": 7,
"Description": "New York"
},
"Department": {
"DepartmentId": 7,
"Description": "Engineering"
},
"ProjectId": 7,
"Description": "Project_3",
"LocationId": 7,
"DepartmentId": 7
},
"Person": {
"Email": "email@gmail.com",
"FirstName": "John",
"LastName": "Doe",
"IsActive": true
},
"StatusCode": {
"StatusId": 8,
"Description": "Accepted"
},
"ReportId": "d4cddb3f-ea6a-4b0a-9820-19bd8ee43b3a",
"Description": "Report 3",
"RoundTrip": 45.88,
"IsBillable": true,
"StartDate": "2013-06-27T00:00:00",
"EndDate": "2013-06-27T14:36:32.467",
"TimeUpdated": "AAAAAAAAJxM="
}, ...
}
这是相关的报告声明:
public class Report
{
public Guid ReportId { get; set; }
public string Description { get; set; }
public double RoundTrip { get; set; }
public bool IsBillable { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public virtual Project Project { get; set; }
public byte[] TimeUpdated { get; set; }
public virtual Person Person { get; set; }
public virtual StatusCode StatusCode { get; set; }
}
在这种情况下,我真的很想在 Report 类中包含各种对象的 ID。例如,我真的很想看看:
"Project": 7,
"Location": 7,
"Department": 7,
"Person": "email@gmail.com",
"StatusCode": 8,
"ReportId": "d4cddb3f-ea6a-4b0a-9820-19bd8ee43b3a",
"Description": "Report 3",
"RoundTrip": 45.88,
"IsBillable": true,
"StartDate": "2013-06-27T00:00:00",
"EndDate": "2013-06-27T14:36:32.467",
"TimeUpdated": "AAAAAAAAJxM="
- 是否有一种相对简单的方法来执行此操作,或者进一步解析我已经看到的结果是否更符合我的利益?
- 为什么默认情况下 EF 在 JSON 中创建这些对象而不仅仅是外键?
【问题讨论】:
-
我会使用 LINQ 从旧的 json 中投影新的 json。那或者创建另一个类并编写一个自定义转换器。我会根据您在整个代码库中使用结果的程度来做出选择。没有简单的方法可以像那样更改 json(当然除了更改 API)。
-
是的,谢谢@evanmcdonnal
标签: c# json entity-framework asp.net-web-api ef-code-first