gpt4 book ai didi

WCF REST 服务不会返回实体的 child

转载 作者:行者123 更新时间:2023-12-05 00:35:42 24 4
gpt4 key购买 nike

我已经使用 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-3bf5":"Test 123","Photos":null,"PlacesOfInterest":null,"WhereTo":"佛罗里达州奥兰多"}

但是,如果我更改 Library 方法以添加子项,则 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 语句中显示实体已完全正确填充。

我确定我只是缺少一些魔法属性,希望以前有这个圆顶的人可以帮助我!

最佳答案

根据您删除回溯导航属性的小测试,您在序列化为 JSON 时遇到问题。默认序列化无法跟踪对象引用,因此当它开始序列化您的 Trip 时它遵循导航属性到兴趣点,首先找到对 Trip 的引用。 .因为它不跟踪引用,所以它遵循导航属性并再次序列化旅行(并再次遵循他的导航属性)=> 无限循环。

您必须像在测试中一样删除回溯导航属性,或者必须告诉序列化程序跟踪引用或从序列化中排除该属性(我不确定第一个选项在 JSON 的情况下会做什么)。我猜你正在使用默认的 WCF 序列化,所以要么:

  • [DateContract(IsReference = true)] 标记每个实体和每个序列化的属性 [DataMember]属性以开始跟踪引用。
  • 或者用 [IgnoreDataMember] 标记回溯导航属性从序列化中排除属性的属性
  • 关于WCF REST 服务不会返回实体的 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9163270/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com