【发布时间】:2012-02-06 16:15:49
【问题描述】:
我使用 REST 模板编写了一个 WCF 服务,该模板的 defaultOutgoingResponseFormat 设置为 Json。在此基础上,我使用 Entity Framework 和 ObjectContext 构建了一个简单的实体模型,以传递自定义 POCO 实体。
如果我传递一个实体,系统会按预期工作。如果我将子项添加到实体,则 REST 响应为空白。在调试器中,实体被正确填充,但服务本身什么也不返回。
例如,我有一个 Trip.Get() 方法。 WCF 代码如下所示:
[WebGet(UriTemplate = "{id}", ResponseFormat = WebMessageFormat.Json)]
public Model.Trip Get(string id)
{
Model.Trip fetchedTrip = null;
try
{
fetchedTrip = Library.Trip.Get(new Guid(id));
}
catch (Exception ex)
{
Debug.Write(ex.Message);
}
return fetchedTrip;
}
Library.Trip.Get 在工作版本中看起来像这样:
public static Model.Trip Get(Guid tripId)
{
using (Model.POCOTripContext context = new Model.POCOTripContext())
{
var tripEntity = context.Trips.FirstOrDefault(c => c.Id == tripId) ?? new Model.Trip();
return tripEntity;
}
}
这会返回预期的结果,如下所示:
{"ArrivalDate":"/Date(1334203200000-0400)/","DepartureDate":"/Date(1334721600000-0400)/","Id":"d6413d96-fe1f-4b1c-ae7a-3bbf516cdc2f", "名称":"Test 123","照片":null,"PlacesOfInterest":null,"WhereTo":"佛罗里达州奥兰多"}
但是,如果我更改库方法以添加子项,REST 服务将返回一个空白值。没什么,纳达。
public static Model.Trip Get(Guid tripId)
{
using (Model.POCOTripContext context = new Model.POCOTripContext())
{
var tripEntity = context.Trips.Include("PlacesOfInterest").Include("Photos").Include("PlacesOfInterest.PoiAttributes").FirstOrDefault(c => c.Id == tripId) ?? new Model.Trip();
return tripEntity;
}
}
调试器在 WCF 服务的 return 语句中显示实体已完全正确填充。
我确定我只是缺少一些魔法属性,并希望以前做过圆顶的人可以帮助我!
【问题讨论】:
-
PlacesOfInterest中是否有Trip或Trips导航属性?如果是,请尝试将其删除(仅用于测试)并重试。 -
这样做会破坏我所有的其他关系。让我做个小手术,然后回来找你,坚持住。
-
做到了!做出一个答案,这样我就可以给你点赞!
标签: wcf json entity-framework rest poco