Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET Core 3.1 OData页面结果序列化_C#_Asp.net Core_Odata_System.text.json - Fatal编程技术网

C# ASP.NET Core 3.1 OData页面结果序列化

C# ASP.NET Core 3.1 OData页面结果序列化,c#,asp.net-core,odata,system.text.json,C#,Asp.net Core,Odata,System.text.json,通过System.Text.Json(ASP.NET Core 3默认值)对以下结果进行序列化时,PageResult响应缺少nextPageLink和count值: [ApiController] [路由(“api/[控制器]”)] 公共类值控制器:控制器库 { [HttpGet] public IActionResult Get() { 变量项=新列表{“值”}; var pageResult=new Microsoft.AspNet.OData.pageResult(项目,新Uri(“ht

通过
System.Text.Json
(ASP.NET Core 3默认值)对以下结果进行序列化时,
PageResult
响应缺少
nextPageLink
count
值:

[ApiController]
[路由(“api/[控制器]”)]
公共类值控制器:控制器库
{
[HttpGet]
public IActionResult Get()
{
变量项=新列表{“值”};
var pageResult=new Microsoft.AspNet.OData.pageResult(项目,新Uri(“http://localhost/foo)项目数);
返回Ok(pageResult);
}
}
但是,当我使用时,结果是正确的:

public void配置服务(IServiceCollection服务)
{
services.AddControllers().AddNewtonsoftJson();
}
结果为
System.Text.Json

[
    "value"
]
{
    "items": [
        "value"
    ],
    "nextPageLink": "http://localhost/foo",
    "count": 1
}
结果为
Newtonsoft.Json

[
    "value"
]
{
    "items": [
        "value"
    ],
    "nextPageLink": "http://localhost/foo",
    "count": 1
}

知道这种行为的原因吗?

在重读问题时,这并不能直接回答OP的问题,即为什么一个格式化程序和另一个格式化程序会导致正确的输出,但可能会为OP提供一些开始查找的位置

在使用OData和Asp.NETCore时,我也看到了一些有趣的行为,从在线文档中很难理解您这些天应该做什么,因为大多数文档似乎已经过时或OData的早期版本。例如,您将在某些文档中看到对GetInlineCount()的一些引用,但它似乎已从API中删除

对于你的问题,我认为你有两个选择 首先,将您的退货类型更改为IQueryable 指定属性
[EnableQuery(PageSize=10)]

或者,保留现有内容,并使用
PageResult
对象:

返回新的PageResult(对象列表,如IEnumerable、Request.GetNextPageLink(5)、Request.ODataFeature().TotalCount)

通过如下设置Request.ODataFeature().TotalCountFunc函数,可以解决Request.ODataFeature().TotalCountFunc不返回值的问题

Request.ODataFeature()

[ApiController]
[路由(“api/[控制器]”)]
公共类值控制器:ODataController
{
[HttpGet]
[启用查询(页面大小=5)]
public IActionResult Get()
{
变量项=新列表{“value1”、“value2”、“value3”、“value4”、“value5”};
返回Ok(项目);
}
}

使用
ODataController
而不是
ControllerBase
扩展控制器<代码>[EnableQuery]
属性需要添加到方法中。如果您正在进行服务器端分页,则可以定义
PageSize

感谢您的建议,不幸的是,两者的结果相同。我相信医生们最终会赶上的,但我感觉到了你的痛苦。我现在认为这实际上可能是
System.Text.Json
格式化程序的一个问题……不幸的是,这仍然没有给我想要的响应。我已经用示例回答更新了问题。