我有一个现有的 WCF REST / JSON 服务,它返回不同类型数据的列表。我想为每个响应添加一个表示修订号的属性。
假设我有一个“汽车”课程
[DataContract]
public class Car {
[DataMember]
public String make;
[DataMember]
public String year;
}
当前 /cars/ 返回一个 Cars 数组,如下所示
{ [ {year: "1990", make: "bmw"}, {year: "2010", make: "ferrari"} ] }
现在,我希望得到回应
{ revision:"1234", cars:[ {year: "1990", make: "bmw"}, {year: "2010", make: "ferrari"} ]}
如果我只有一个 Cars 类,这很简单,但我的服务有数百个简单实体,我希望每个实体都返回修订属性和实体列表。我想我可以做类似下面的事情,我创建一个通用类来包装现有项目。
[DataContract]
public class VersionedItem<T> {
String revision;
T item;
[DataMember]
public String revision {
get{}
set{}
}
[DataMember]
public T item {
get{}
set{}
}
}
这几乎可以很好地工作,除非我需要返回以下内容:
{ revision:"1234", cars:[ {year: "1990", make: "bmw"}, {year: "2010", make: "ferrari"} ] }
这实际上是返回的
{ revision:"1234", item:[ {year: "1990", make: "bmw"}, {year: "2010", make: "ferrari"} ] }
问题1:有没有办法专门化一个泛型类的实例来为项目属性(在这种情况下是汽车)指定正确的名称?IE,(完全废话,但有助于理解这一点)
public class VersionedCar : VersionedItem<Car>
{
[DataMember(Name="cars")]
public Car item{
get{}
set{}
}
}
问题 2:如果没有,实现包装所有响应并在所有响应中包含新属性的最佳方法是什么?