Question Le client RestSharp renvoie toutes les propriétés en tant que null lors de la désérialisation de la réponse JSON


J'essaie de faire un exemple très simple d'utilisation de la méthode Execute de RestSharp pour interroger un point de terminaison et la sérialiser vers un POCO. Cependant, tout ce que j'essaie donne un objet response.Data qui possède toutes les propriétés avec une valeur NULL.

Voici la réponse JSON:

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

Voici mon code de test

 [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

    }

Et voici mon code 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;
    }

Et enfin, voici mon 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; }
}

De plus, les propriétés ErrorException et ErrorResponse de la réponse sont NULL.

Cela semble être un cas très simple, mais je tourne en rond toute la journée! Merci.


10
2018-06-18 16:55


origine


Réponses:


Quel est le Content-Type dans la réponse? Si ce n'est pas un type de contenu standard comme "application / json", etc., RestSharp ne comprendra pas quel désérialiseur utiliser. Si c'est en fait un type de contenu non "compris" par RestSharp (vous pouvez le vérifier en inspectant le Accept envoyé dans la demande), alors vous pouvez résoudre ce problème en faisant:

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

MODIFIER:

Ok, désolé, en regardant à nouveau le JSON, vous avez besoin de quelque chose comme:

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

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

Et puis faites:

client.Execute<LocationResponse>(request);

9
2018-06-18 17:19