TLDR; 无法使用Json.net反序列化器将查询字符串数据解析为对象模型。
长版: 我在dotnet core 2.0中使用Newtonsoft.Json的DefaultContractResolver作为Json序列化程序;
[Route("api/[controller]")]
public class ValuesController : Controller
{
[HttpGet]
public Core.Data.Models.Request.DataSourceRequestModel Get(Core.Data.Models.Request.DataSourceRequestModel req)
{
return req;
}
}
在web api控制器中,我正在使用模型;
public sealed class DataSourceRequestModel
{
[JsonProperty(PropertyName = "start")]
public int Start { get; set; }
[JsonProperty(PropertyName = "limit")]
public int Limit { get; set; }
[JsonProperty(PropertyName = "filter")]
public ICollection<DataSourceRequestFilterModel> Filters { get; set; }
[JsonProperty(PropertyName = "sort")]
public ICollection<DataSourceRequestSortModel> Sorts { get; set; }
public DataSourceRequestModel()
{
Limit = 25;
}
}
public class DataSourceRequestFilterModel
{
[JsonProperty(PropertyName = "property")]
public string Property { get; set; }
[JsonProperty(PropertyName = "operator")]
public string Operator { get; set; }
[JsonProperty(PropertyName = "value")]
public string Value { get; set; }
}
public class DataSourceRequestSortModel
{
[JsonProperty(PropertyName = "property")]
public string Property { get; set; }
[JsonProperty(PropertyName = "direction")]
public string Direction { get; set; }
}
DataSourceRequestModel是;
_dc:1505755748815
page:1
start:99
limit:163
sort:[{"property":"Name","direction":"ASC"}]
filter:[{"property":"Code","value":"","operator":"eq"},{"property":"Name","value":"Ucretli","operator":"eq"}]
基本上,我将此值作为查询字符串发送;
{
"start": 99,
"limit": 163,
"filter": null,
"sort": null
}
结果,我得到了这个;
MyModel
Json.net反序列化程序无法解析过滤器和排序属性,只是忽略它们。即使我更改属性名称,这次它也不会返回空值,但是我再次获得空数组。
导致这个问题的任何想法?
提前谢谢。
编辑1 :在DataSourceRequestModel中,我都尝试过List和DataSourceRequestFilterModel []数组更改但仍然没有成功。
编辑2 :如需进一步参考,我将分享我找到的解决方案。正如dbc 2在下面提到的那样,dotnet核心不使用Json.Net进行复杂的模型绑定,因此模型中的属性保持为null。因此,您必须创建并使用自己的自定义模型绑定器,详细信息请参见此处; http://www.dotnetcurry.com/aspnet-mvc/1368/aspnet-core-mvc-custom-model-binding
再次感谢所有参与的人。