私は、学生レコードシステムと財務システムの間でデータを統合するプログラムを作成しています。 SRSはクラウドベースのソリューションであり、Financeシステムはオンサイトです。データは、RESTful APIを使用してSRSから抽出されます。私は、財務システムとの統合のために返されたリソースをステージングデータベースに書き込む予定です。少しの研究の後、RestSharpを私のソリューションの基盤として使うことに決めました。汎用オブジェクトへのRESTリソースの逆シリアル化
Recommended Usageガイドの後に、私はリクエストを成功させ、レスポンスデータを自分のクラスにデシリアライズする解決策を得ることができました。しかし、私は小さなスピードバンプをヒットし、再び行くために少しの助けが必要です。
SRS Rest APIには、PostalAddressOccupancyリソースが含まれています。
私の問題は、乗員の特性である:SRSのAPIドキュメントによれば、以下の構造を有しています。これは、混合型で示されるように、他の多くのリソースタイプ(つまり、学生、スタッフ、Guardianなど)のいずれか1つになります。
これは、ジェネリックを使用してデータモデルで簡単に表現できます。例えば
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;
}
}
私の問題はRestSharpが正しく乗員のタイプは応答データに戻されているかを理解するために取得する方法です。上記のGetPostalAddressOccupanciesメソッドを使用して、すべてのものが乗員から正しく非直列化されたオブジェクトのリストを取得します。これは、そのプロパティがキーと値のペアとして含まれている基本オブジェクト型として返されます。
RestSharpデシリアライザのヒントを提供するために、クラスまたはジェネリックプロパティをいくつかのタグで飾る必要がありますか?
また、リソースに基本プロパティ(entityTypeなど)が含まれていることに気付きました。したがって、これを介して乗員の種類を識別することができますが、どのように役立つかもしれないのか分かりません。
「RestApiClient」とは何ですか?それは[restsharp](https://github.com/restsharp/RestSharp/search?utf8=%E2%9C%93&q=RestApiClient&type=)の一部ではないようです。 – dbc