ASP.NET Core OData 8中IEEE754Compatible=true未返回字符串格式int64
ASP.NET Core OData 8 未实现IEEE754Compatible=true的数值类型字符串序列化功能
规范要求
根据OData v4规范,当请求的Accept头部或$format查询参数中包含
IEEE754Compatible=true时,服务需将int64和decimal类型以字符串格式返回,核心规则如下:
- 请求JSON格式可通过$format查询参数或Accept头部指定,$format优先级更高,支持IEEE754Compatible等参数;
IEEE754Compatible=true要求将Edm.Int64和Edm.Decimal(包括计数)序列化为字符串,避免JavaScript处理时出现数字精度丢失问题。
问题现象
- 虽然OData.net在2016年的相关讨论中已确认实现该功能,但ASP.NET Core OData 8并未支持此特性。
- 测试表明,无论通过Accept头部还是$format查询参数设置
IEEE754Compatible=true,返回JSON中的long类型属性始终以数字格式输出,未按规范转为字符串。
复现步骤
- 遵循微软《ASP.NET Core OData 8入门》教程搭建项目;
- 为
Customer模型添加long类型的TestLong属性; - 使用
long.MaxValue初始化该属性的测试数据。
调试更新
自定义IStreamBasedJsonWriterFactory并注入后调试发现,isIeee754Compatible参数始终为false——即便请求中已明确指定IEEE754Compatible=true,当前暂未找到手动设置该参数的有效方式。
内容的提问来源于stack exchange,提问作者Daniel Vernall
相关产品推荐
相关产品推荐

