ich mit dem Ernte-API spielte und ich versuche, automatisch so einfach wie möglich die Objekte auf der Karte, leider, wenn ich eine Anfrage wie GET /projects
tue erzeugt es ein Ergebnis in etwa so:dynamisch auf eine Eigenschaft in RestSharp Deserialisieren
[{
project: {
name: "Test"
}
},
{
project: {
name: "Test 2"
}]
In RestSharp, kann es nicht direkt tun:
client.Execute<List<Project>>(request)
Weil es für eine Eigenschaft Project
genannt aussehen wird. Also muß ich eine andere Klasse machen, die die Eigenschaft hat, und es so nennen:
client.Execute<List<ProjectContainer>>(request)
Ich will nicht eine ‚Container‘ Klasse für jede Einheit machen, so dass ich dachte, dass ich eine clevere Lösung gefunden eine Klasse mache ich auf alle verwenden können:
public class ListContainer<T> where T : IHarvestEntity
{
public T Item { get; set; }
}
Aber natürlich hat der Deserializer keine Ahnung, braucht es die Entität-Namen zuzuordnen (oder „Projekt“) auf die Eigenschaft Item
. In der Restsharp-Dokumentation habe ich festgestellt, dass ich [DeserializeAs(Name = "CustomProperty")]
verwenden kann, um dem Deserializer mitzuteilen, welches Feld dieser Eigenschaft zugeordnet werden soll. Attribute erlauben jedoch nur Konstanten, was bedeutet, dass ich nicht tun kann:
Kennt jemand eine clevere Lösung für diese? Also muss ich nicht 10 verschiedene Container-Klassen erstellen?
Dynamische Objekt gegeben werden könnte, ist wahrscheinlich die Antwort auf die Frage, aber viele Entwickler würde Sie warnen, einfach die XYZModel-Klassen zu implementieren und diese zu verwenden; Sie erhalten alle Vorteile und Garantien Ihres Compilers und riskieren (dieselbe Klasse von) Laufzeitausnahmen nicht. –
Demokratisch denke ich, ich sollte Ihnen die Prämie geben, aber ich fühle, dass die Antwort von Mikko die Frage richtiger für meine Situation beantwortet. Weil ich in Ihrem Beispiel die automatische Zuordnung zur Entity verliere, was die ganze Idee dahinter ist. Liege ich damit falsch? – Chris
Mapping auf ein Objekt ist möglich, mit dem Projekt-Objekt aus der Antwort von Mikko: var Projekt = neues Projekt (o.SelectToken ("Projekt"). SelectToken ("Name"). Wert) –