Ich habe eine bestehende WCF REST / JSON-Dienst, der Listen von verschiedenen Arten von Daten zurückgibt. Ich möchte zu jeder Antwort ein einzelnes Attribut hinzufügen, das eine Revisionsnummer darstellt.
Angenommen, ich habe eine Klasse 'Auto'.
[DataContract]
public class Car {
[DataMember]
public String make;
[DataMember]
public String year;
}
Derzeit gibt /cars/ ein Array von Cars zurück, wie das folgende
{ [ {year: "1990", make: "bmw"}, {year: "2010", make: "ferrari"} ] }
Ich möchte, dass die Antwort lautet
{ revision:"1234", cars:[ {year: "1990", make: "bmw"}, {year: "2010", make: "ferrari"} ]}
Dies ist trivial, wenn ich nur eine einzige Klasse von Cars habe, aber mein Dienst hat Hunderte von einfachen Entitäten und ich möchte für jede das Revisionsattribut und die Liste der Entitäten zurückgeben. Ich dachte, ich könnte etwas wie das folgende tun, wo ich eine generische Klasse erstellen, um das vorhandene Element zu wickeln.
[DataContract]
public class VersionedItem<T> {
String revision;
T item;
[DataMember]
public String revision {
get{}
set{}
}
[DataMember]
public T item {
get{}
set{}
}
}
Dies funktioniert fast perfekt, außer wenn ich Folgendes zurückgeben muss:
{ revision:"1234", cars:[ {year: "1990", make: "bmw"}, {year: "2010", make: "ferrari"} ] }
Dies wird tatsächlich zurückgegeben
{ revision:"1234", item:[ {year: "1990", make: "bmw"}, {year: "2010", make: "ferrari"} ] }
Frage 1: Gibt es eine Möglichkeit, eine Instanz der generischen Klasse zu spezialisieren, um den richtigen Namen für das Elementattribut (in diesem Fall Autos) anzugeben? IE, (totaler Blödsinn, aber um den Punkt zu verdeutlichen)
public class VersionedCar : VersionedItem<Car>
{
[DataMember(Name="cars")]
public Car item{
get{}
set{}
}
}
Frage 2: Wenn nicht, wie kann man am besten erreichen, dass alle Antworten umbrochen werden und ein neues Attribut in alle Antworten aufgenommen wird?