13

RestSharpのExecuteメソッドを使用してRESTエンドポイントをクエリし、POCOにシリアル化するという非常に簡単な例を実行しようとしています。ただし、私が試したすべての結果は、NULL値を持つすべてのプロパティを持つresponse.Dataオブジェクトになります。

JSON応答は次のとおりです。

{
   "Result":
   {
       "Location":
       {
           "BusinessUnit": "BTA",
           "BusinessUnitName": "CASINO",
           "LocationId": "4070",
           "LocationCode": "ZBTA",
           "LocationName": "Name of Casino"
       }
   }
}

これが私のテストコードです

 [TestMethod]
    public void TestLocationsGetById()
    {
        //given
        var request = new RestRequest();
        request.Resource = serviceEndpoint + "/{singleItemTestId}";
        request.Method = Method.GET;
        request.AddHeader("accept", Configuration.JSONContentType);
        request.RootElement = "Location";
        request.AddParameter("singleItemTestId", singleItemTestId, ParameterType.UrlSegment);
        request.RequestFormat = DataFormat.Json;

        //when
        Location location = api.Execute<Location>(request);            

        //then
        Assert.IsNotNull(location.LocationId); //fails - all properties are returned null

    }

そしてこれが私のAPIコードです

 public T Execute<T>(RestRequest request) where T : new()
    {
        var client = new RestClient();
        client.BaseUrl = Configuration.ESBRestBaseURL;

        //request.OnBeforeDeserialization = resp => { resp.ContentLength = 761; };

        var response = client.Execute<T>(request);
        return response.Data;
    }

そして最後に、これが私のPOCOです

 public class Location
{        
    public string BusinessUnit { get; set; }
    public string BusinessUnitName { get; set; }
    public string LocationId { get; set; }
    public string LocationCode { get; set; }
    public string LocationName { get; set; }
}

さらに、応答のErrorExceptionプロパティとErrorResponseプロパティはNULLです。

これは非常に単純なケースのように思えますが、私は一日中輪になって走り回っています!ありがとう。

4

1 に答える 1

10

Content-Type応答の は何ですか? 「application/json」などの標準コンテンツ タイプでない場合、RestSharp はどのデシリアライザーを使用するかを認識できません。それが実際にRestSharpによって「理解」されていないコンテンツタイプである場合(Acceptリクエストで送信されたを調べることで確認できます)、次のようにしてこれを解決できます。

client.AddHandler("my_custom_type", new JsonDeserializer());

編集:

申し訳ありませんが、もう一度 JSON を見ると、次のようなものが必要です。

public class LocationResponse
   public LocationResult Result { get; set; }
}

public class LocationResult {
  public Location Location { get; set; }
}

そして、次のようにします。

client.Execute<LocationResponse>(request);
于 2012-06-18T17:19:37.420 に答える