![](/img/trans.png)
[英]Is it possible to instantiate Null values while deserializing with RestSharp
[英]how to filter null values with RestSharp?
我向RestSharp请求:
var request = new RestRequest("api/timerecord", Method.GET);
var response = client.Execute<List<TimeRecordDTO>>(request);
TimeRecords包含一个属性SettledOn。 它具有DateTime-Value或null值:
...,"SettledOn":null,...
要么
...,"SettledOn":"2018-01-02T18:26:01",...
现在,我尝试对此属性进行过滤。 我只想要TimeRecords,其中SettledOn为null。
我已经试过了
var request = new RestRequest("api/timerecord", Method.GET);
request.AddParameter("SettledOn", null);
var response = client.Execute<List<TimeRecordDTO>>(request);
但是我仍然得到所有的TimeRecords。
我该怎么做才能过滤实体?
您在这里混淆了这些概念。 RestSharp只是一个HTTP客户端库。 如果您的API方法返回所有TimeRecords实体,则HTTP响应将包含所有实体,并且在调用client.Execute<List<TimeRecordDTO>>(request);
时,RestSharp将反序列化整个列表。 client.Execute<List<TimeRecordDTO>>(request);
。 在您的API分析此请求参数并在服务器端执行实际过滤之前,向请求中添加参数SettledOn
不会有任何影响。
因此,您有两个选项可以过滤值:
客户端解决方案:
只需使用简单的LINQ过滤实体:
var request = new RestRequest("api/timerecord", Method.GET);
var response = client.Execute<List<TimeRecordDTO>>(request);
var filtered = response.Data.Where(x => x.SettledOn == null);
服务器端解决方案:
您应该调整API方法的实现以分析请求参数。 如果您需要增加只返回SettledOn
设置为null
实体的可能性,则可以请求参数settledOnNullOnly
:
public IEnumerable<TimeRecordDTO> Get(bool settledOnNullOnly)
{
// Pass settledOnNullOnly to DB query or filter entities with LINQ
// ...
}
现在,当您将settledOnNullOnly
设置为true
,您将仅接收已过滤的实体。
var request = new RestRequest("api/values", Method.GET);
request.AddParameter("settledOnNullOnly", "true");
var response = client.Execute<List<TimeRecordDTO>>(request);
从性能的角度来看,服务器端解决方案更好,因为您无需获取和传输不必要的数据。 如果您有可能调整API并计划大量使用此类过滤,请使用此方法。 否则,客户端方法应该适合您。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.