これが私のクラスです:
public class PTList
{
private String name;
public PTList() { }
public PTList(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
}
そして私のRestSharp POSTリクエスト:
protected static IRestResponse httpPost(String Uri, Object Data)
{
var client = new RestClient(baseURL);
client.AddDefaultHeader("X-Authentication", AuthenticationManager.getAuthentication());
client.AddDefaultHeader("Content-type", "application/json");
var request = new RestRequest(Uri, Method.POST);
request.RequestFormat = DataFormat.Json;
request.AddJsonBody(Data);
var response = client.Execute(request);
return response;
}
また、適切なURIとPTListオブジェクトを指定してhttpPostメソッドを使用すると、フロントAPIは「name」がnullであると応答します。私のPTListオブジェクトはAPIのリクエストで有効なJSONとしてシリアル化されていないと思いますが、何が問題になっているのか理解できません。
私が見ることができるいくつかの問題があります。
1つ目は、送信するオブジェクトにパブリックフィールドがないことです。また、定義を少し簡略化します。
public class PTList
{
public PTList() { get; set; }
}
2番目の問題は、RestSharpがContent-Type
を設定することによって行うrequest.RequestFormat = DataFormat.Json
ヘッダーを設定していることです。
また、Object
ではなくジェネリックを使用したいと思います。
HttpPostメソッドは次のようになります。
protected static IRestResponse httpPost<TBody>(String Uri, TBody Data)
where TBody : class, new
{
var client = new RestClient(baseURL);
client.AddDefaultHeader("X-Authentication", AuthenticationManager.getAuthentication());
var request = new RestRequest(Uri, Method.POST);
request.RequestFormat = DataFormat.Json;
request.AddJsonBody(Data);
var response = client.Execute(request);
return response;
}
RestSharpがデフォルトで使用するJsonシリアライザーは、プライベートフィールドをシリアル化しません。したがって、次のようにクラスを変更できます。
public class PTList
{
public PTList() { }
public PTList(String name) {
this.name = name;
}
public string name { get; set; }
}
そしてそれはうまくいくでしょう。
デフォルトのシリアライザーの機能が十分でない場合(私が知る限り、プロパティの名前を変更することもできません。たとえば、Name
をname
としてシリアル化することもできません)-より優れたシリアライザーを使用できます。 JSON.NETのように、説明されているように ここ たとえば。
AddJsonBodyの代わりにこれを試すことができます:
request.AddParameter( "application/json; charset = utf-8"、JsonConvert.SerializeObject(Data)、ParameterType.RequestBody);
これはここでの解決策の1つです: JSONをRestSharpに追加する方法POSTリクエスト