ジェネリック型を介してWebAPIサーバーにデータを送信する単純なクライアントがあります
次の構造は、サーバーとクライアントの両方に存在します
public interface IRequest<T>
{
string ApiKey { get; set; }
T RequestObject { get; set; }
}
public class UserRequest : IRequest<UserDetail>
{
public string ApiKey { get; set; }
public UserDetail RequestObject { get; set; }
}
次の構文を使用してサーバーにリクエストを送信します
var client = new RestClient(WebConfigurationManager.AppSettings["apiUri"]);
var profileRequest = new UserRequest
{
ApiKey = "xxxxx",
RequestObject = new UserDetail {Password = txtPassword.Text, UserName = txtUserName.Text}
};
var request = new RestRequest("UserRequest/PostUserDetail", Method.POST);
request.AddObject(profileRequest);
ここで興味深いのは、サーバー側では、UserDetailオブジェクトが適切に逆シリアル化されず、NULLが含まれているだけで、ApiKeyプロパティが正しく設定されていることです。
public UserDetail PostUserDetail(UserRequest userRequest)
{
return new UserDetail { Password = userRequest.RequestObject.Password, UserName = userRequest.RequestObject.UserName };
}
上記から、userRequest.ApiKeyが設定されますが、サーバーAPIではuserRequest.RequestObjectは常にNULLです。
ジェネリック型はサポートされていませんか?そうでない場合、サーバー側でデシリアライザーを変更する方法について誰かがポインターを持っていますか?オブジェクトがクライアント側で適切に構築されているかどうかを確認しました。
どうもありがとう