Ich schreibe ein Programm, um Daten zwischen unserem Studentenaktensystem und dem Finanzsystem zu integrieren. Das SRS ist eine cloudbasierte Lösung, während das Finanzsystem on-prem ist. Daten müssen aus dem SRS mithilfe seiner RESTful-API extrahiert werden. Ich plane dann, die zurückgegebenen Ressourcen in eine Staging-Datenbank für die Integration mit dem Finanzsystem zu schreiben. Nach ein wenig Recherche habe ich mich entschieden, RestSharp als Grundlage für meine Lösung zu verwenden.Deserialisierung der REST-Ressource zum generischen Objekt
Nach dem Recommended Usage Leitfaden konnte ich eine Lösung, die erfolgreich Anfragen und Deserialisierung der Antwortdaten in meine Klassen erhalten. Allerdings habe ich eine kleine Geschwindigkeitsbegrenzung und brauche ein wenig Hilfe, um wieder in Gang zu kommen.
Die SRS-Rest-API enthält die Ressource PostalAddressOccupancy. Gemäß der SRS-API-Dokumentation hat folgende Struktur:
Mein Problem mit dem Insassen Eigenschaft ist. Dies kann, wie durch den gemischten Typ angezeigt, jeder einer Anzahl von anderen Ressourcentypen sein (dh Student, Staff, Guardian usw.).
Ich kann dies leicht in meinem Datenmodell mit Generika darstellen. ZB
public class PostalAddressOccupancy<T>
{
public DateTime EffectiveDate { get; set; }
public DateTime EndDate { get; set; }
public string EntityType { get; set; }
public string Href { get; set; }
public string Id { get; set; }
public bool IsCorrespondenceAddress { get; set; }
public T Occupant { get; set; }
public PostalAddress PostalAddress { get; set; }
public string PostalAddressType { get; set; }
public static PostalAddressOccupancy<T> GetPostalAddressOccupancy(string id)
{
var request = new RestRequest
{
Resource = "PostalAddressOccupancy/{Id}",
RootElement = "postalAddressOccupancy"
};
request.AddParameter("Id", id, ParameterType.UrlSegment);
RestApiClient restApiClient = new RestApiClient("SRS API");
return restApiClient.Execute<PostalAddressOccupancy<T>>(request);
}
public static List<PostalAddressOccupancy<T>> GetPostalAddressOccupancies()
{
List<PostalAddressOccupancy<T>> list = new List<PostalAddressOccupancy<T>>();
var request = new RestRequest
{
Resource = "PostalAddressOccupancy",
RootElement = "postalAddressOccupancies"
};
RestApiClient restApiClient = new RestApiClient("SRS API");
foreach (var pao in restApiClient.Execute<List<PostalAddressOccupancy<T>>>(request))
{
list.Add(GetPostalAddressOccupancy(pao.Href.Split('/').Last()));
}
return list;
}
}
Mein Problem ist, wie RestSharp zu bekommen, um richtig zu verstehen, welche Art von Insassen in den Antwortdaten zurückgegeben werden. Mit der Methode GetPostalAddressOccupancies oben erhalte ich eine Liste von Objekten, bei denen alles außer dem Insassen korrekt deserialisiert ist. Dies wird als Basisobjekttyp zurückgegeben, dessen Eigenschaften als Schlüssel/Wert-Paare enthalten sind.
Muss ich meine Klasse oder generische Eigenschaft mit einigen Tags dekorieren, um einen Hinweis auf die RestSharp-Deserializer zu geben?
Ich habe auch festgestellt, dass Ressourcen Basiseigenschaften (zB EntityType) enthalten. Somit kann ein Insassentyp dadurch identifiziert werden, aber ich bin mir nicht sicher, wie das helfen könnte.
Was ist 'RestApiClient'? Es scheint nicht ein Teil von [restsharp] (https://github.com/restsharp/RestSharp/search?utf8=%E2%9C%93&q=RestApiClient&type=) zu sein. – dbc