我有以下对象:
public class Car
{
public virtual int Id {get;set;}
public virtual IList<Spec> Specs { get; set; }
public virtual IList<Owner> Owners { get; set; }
}
public class Spec
{
public virtual int Id { get; set;}
public virtual string Info { get; set;}
}
public class Owner: ILast
{
public virtual int Id { get; set;}
public virtual string FullName{ get; set;}
public virtual DateTime DateTime { get; set;}
}
Car
与Owner
有1:M,但我想当我请求Car
实体时,我得到的不是数组,而是单个实体。
public class BaseController<T> : ApiController where T : IEntity
{
private readonly IRepository<T, TKey> _repo;
public BaseReadController(IRepository<T, TKey> repo)
{
_repo = repo;
}
public IQueryable<T> Get()
{
return _repo.Query();
}
}
如果实现ILast
接口,则Query
返回IQuerable
并具有选择具有最后一个DateTime
属性的实体的谓词。例如,我们在Owner
表中有以下数据:
所有者表:
id | FullName | DateTime | CarId
1 name1 12.01.13 1
2 name2 15.04.15 1
查询将只返回第二个。
在JSON结果我将得到(假设Spec
表也有2条记录):
Car = {
id: 1,
Specs: {
[0]: object with spec properties,
[1]: object with spec properties,
},
Owners: {
[0]: {
id: 1,
FullName: 'name2',
DateTime: '15.04.5'
}
}
}
但是,我想改变序列化,Owners
属性总是包含一条记录。我想要得到以下JSON:
Car = {
id: 1,
Specs: {
[0]: object with spec properties,
[1]: object with spec properties,
},
Owners: {
id: 1,
FullName: 'name2',
DateTime: '15.04,.5'
}
}
可以通过接口判断实体
p。我用OData
。
您可以通过编写自定义序列化来实现这一点,但我不建议使用单个对象覆盖数组项表示,因为那样就不是标准了。
我建议在Car对象中创建两个属性,一个Owner和另一个过去的所有者,并且不要通过使用JSON ignore将过去的所有者暴露给用户。