我正在开发一个使用 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 信息,但似乎不知道如何返回。
最佳答案
VendorAddress
和 Address
是所谓的导航属性。
您可以通过在查询中使用 $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://www.odata.org/odata-services/
希望这对您有所帮助。
关于c# - 使用 OData 在 .NET API 上返回嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43217041/