gpt4 book ai didi

c# - 使用 OData 在 .NET API 上返回嵌套对象

转载 作者:太空宇宙 更新时间:2023-11-03 12:29:47 24 4
gpt4 key购买 nike

我正在开发一个使用 OData 的 .NET API,目前我在将嵌套对象返回给客户端时遇到问题。

一切似乎都在工作,即使我在响应之前在 Controller 上放置了一个断点。我可以看到将与所有信息一起返回的供应商对象已正确填充,但是当我查看客户端收到的 JSON 响应时,它只有原始类型和枚举,作为另一个对象的每个其他属性都没有被序列化到 JSON 结果。

public class Vendor : IEntity
{
public virtual int Id { get; set; }
public virtual VendorAddress PrimaryAddress { get; set; }
public virtual string VendorName { get; set; }
}

public class VendorAddress : IEntity
{
public virtual int Id { get; set; }
public virtual Vendor Vendor { get; set; }
public virtual Address Address { get; set; }

}

public class Address : IEntity
{
public virtual int Id { get; set; }
public virtual string Line1 { get; set; }
public virtual string Line2 { get; set; }
public virtual string Country { get; set; }
public virtual string CountryCode { get; set; }
public virtual string City { get; set; }
public virtual string County { get; set; }
public virtual string StateProvince { get; set; }
public virtual string ZipCode { get; set; }
}

public SingleResult<Vendor> Get([FromODataUri] int key)
{
var result = _repository.Query<Vendor>().Where(a => a.Id == key);
return SingleResult.Create(result);
}

基本上我想返回供应商信息,包括 JSON 结果中的 PrimaryAddress/Address 信息,但似乎不知道如何返回。

最佳答案

VendorAddressAddress 是所谓的导航属性。您可以通过在查询中使用 $expand 来获取它们。首先在你的Get方法中添加一个[EnableQuery]

[EnableQuery]
public SingleResult<Vendor> Get([FromODataUri] int key)

然后尝试在表单中请求

<serviceUri>/Vendor(1)?$expand=VendorAddress
<serviceUri>/Vendor(1)?$expand=VendorAddress($expand=Address)

你必须添加一行

config.Expand()

在你的

WebApiConfig.Register(HTTPConfiguration config)

方法。

这是一个关于测试服务的示例请求:

http://services.odata.org/TripPinRESTierService/People('russellwhyte')?$expand=BestFriend($expand=Trips)

以及更多信息供引用:http://www.odata.org/odata-services/

希望这对您有所帮助。

关于c# - 使用 OData 在 .NET API 上返回嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43217041/

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