2016-07-28 70 views
0

我创建了一个带有EF的WebApi项目,并将其配置为json响应时,它开始为我提供一个包含导航属性中所有数据的查询(实体)的json对象。我关闭了EF的延迟加载,现在我可以看到我的响应不包含任何来自导航实体的数据。但是,仍然有几个空阵列被显示。我怎么才能彻底摆脱它们?如何从WebAPI响应json中删除导航属性空EF阵列?

除此之外,json响应将$ .id属性添加到我的响应中,我们是否也可以删除它?

{ 
$id: "1", 
ChargePoints: [ ], 
ChargerActionHistory: [ ], 
ChargingBoxModels: null, 
ChargingStations: null, 
StatusCodes: null, 
WallSettings: null, 
Heartbeats: [ ], 
PK_ChargingBoxID: 2, 
FK_ChargingStationsID: 1, 
FK_WallSettingsID: 1, 
FK_StatusCodeID: 1, 
FK_ChargingBoxModelID: 1, 
DeviceID: "HUB399209-UK", 
ChargingBoxName: "ArneCharger", 
CSEndpoint: null, 
CBEndpoint: null, 
CSPort: null, 
CBPort: null, 
DeviceIP: null, 
OperationalPhase: null, 
HeartbeatInterval: 5, 
MeterInterval: 10, 
Notes: "test device", 
CommissionedDate: "2016-05-23T13:52:07.193", 
ExpiryDate: "2016-06-23T13:52:07.193", 
isAuthenticated: true, 
isPublic: true, 
isActive: true, 
Keys: "39c5f761-5c08-4b3d-9b88-adcfd75ss26b" 
} 
+0

一些代码片段给你的问题更多的含义。 – Venky

+1

通常你不直接返回域模型。您需要将它们转换为POCO对象并将其返回给公众。在创建POCO时,您可以指定要向世界公开的属性。 – Venky

+0

是不是这个转换开销?像转换域模型到特定的poco对象和用户,然后从poco到域模型。 – Shahzad

回答

1

这可以使用序列化属性来完成。

ASP.NET文档是如何做到这一点的良好开端。 http://www.asp.net/web-api/overview/formats-and-model-binding/json-and-xml-serialization

通常你应该避免暴露你的实体,而是映射到ViewModel POCO。但是,在一个简单的应用程序中,您可以避免这样做。

+0

你能指导我如何实现ViewModel POCO。我做了一个数据库优先的方法,然后使用EF 6从模型生成代码。不是代码是基于POCO的类吗?我想用S.O.L.I.D来实现我的API。 对不起,如果我很天真, – Shahzad