【发布时间】:2012-03-02 21:50:27
【问题描述】:
我有一个现有的 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:如果没有,实现包装所有响应并在所有响应中包含新属性的最佳方法是什么?
【问题讨论】:
标签: json wcf generics rest datamember