gpt4 book ai didi

c# - 反序列化 JSON 响应时,RestSharp 客户端将所有属性返回为 null

转载 作者:可可西里 更新时间:2023-11-01 08:26:01 28 4
gpt4 key购买 nike

我正在尝试做一个非常简单的示例,即使用 RestSharp 的 Execute 方法查询休息端点并序列化为 POCO。但是,我尝试的所有操作都会产生一个 response.Data 对象,该对象的所有属性都具有 NULL 值。

这是 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。

这看起来是一个很简单的案例,但是我却在原地转了一整天!谢谢。

最佳答案

响应中的 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);

关于c# - 反序列化 JSON 响应时,RestSharp 客户端将所有属性返回为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11087508/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com