我正在使用使用OData的.NET API,我目前在将嵌套对象返回给客户端时遇到问题。
即使我在响应之前在Controller上设置了断点,一切似乎都在起作用。我可以看到将返回的Vendor对象,并且所有信息都已正确填充,但是当我查看JSON响应时,Client收到它只有原始类型和枚举,其他每个属性都不会被序列化到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信息,但似乎无法弄清楚如何。
答案 0 :(得分:1)
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/
希望这有帮助。