如何在 WebApi IActionResult Ok() 函数中删除可空小数的尾随零?

     2023-04-14     135

关键词:

【中文标题】如何在 WebApi IActionResult Ok() 函数中删除可空小数的尾随零?【英文标题】:How to remove trailing zeros of nullable decimal in WebApi IActionResult Ok() function? 【发布时间】:2019-08-08 12:21:27 【问题描述】:

我有一个 sqlSever BDD,它存储一些表,其中包含十进制 (12,6) 之类的列 它存储这样的值,即:1.000000 仅表示“1”,他会自动添加尾随零。 当我使用 linq 获取这些值并从 webApi .net core 2.2 返回带有 Ok(myObjectToSerializeInJson) 函数的 IActionResult 它会生成一个如下所示的 json:


"glu": 43.2,
"suc": 5.6,
"lip": null,
"agSat": 17.4,
"pro": 7.1,
"alc": 0,
"orga": 0,

但在我决定升级一些 nuget 包之前,这些包将我带到了最新版本的 json.net (12.0.1),现在相同的请求返回那些尾随零...


"glu": 43.200000,
"suc": 5.600000,
"lip": null,
"agSat": 17.400000,
"pro": 7.100000,
"alc": 0.000000,
"orga": 0.000000,

是否可以保留旧的行为?

【问题讨论】:

Automapper 不会创建 JSON,所以我不明白你的问题。 此外,尾随零并不重要。 17.40000017.4 是相同的。仅当十进制通过未在此问题中发布的代码格式化为字符串时,零才重要。 介意editminimal reproducible example 那个问题? SQL Server 也是如此——尾随零并不重要。 我知道尾随零并不重要,但我认为为了网络性能,最好不要在我的请求中包含那些无用的字符。它更重。而且我的 json 很大,对大小有很大影响。 【参考方案1】:

谢谢大家的回复,对我帮助很大:)

最后我在每个可以为空的小数上添加了一个注释?我认为我的需要需要它们的 TDO 对象的成员。 它看起来像这样:

[JsonConverter(typeof(DecimalJsonConverter))]
public decimal? FielDecimalX  get; set; 

我已经写了一个类来处理这个solution中的转换

    public class DecimalJsonConverter : JsonConverter
    
        public override bool CanConvert(Type objectType)
        
            return objectType == typeof(decimal);
        

        public override object ReadJson(JsonReader reader, Type objectType, object existingValue,
            JsonSerializer serializer)
        
            if (reader.TokenType == JsonToken.Null)
            
                return null;
            
            else
            
                return Convert.ToDecimal(reader.Value, CultureInfo.InvariantCulture);
            
        

        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        
            writer.WriteRawValue(((decimal)value).ToString("G6", CultureInfo.InvariantCulture));
        
    

我选择了“G6”来满足我的需要。如果一个值大于 5 个十进制值,则输出为 x.yE-05 十进制值 0.0000xy 但 javascript 正确地重新调整此格式数字。

所以我的 API .net core 2.2 的输出返回这个 json:


"eau": 7.83,
"naCl": 0.5,
"orga": 7.2E-05,
"k1": null,

希望此更改不会破坏性能,但我看不出有任何问题。因此,我可以在我的请求中保存有效负载。 希望对您有所帮助!

【讨论】:

IActionResult 类型返回结果时如何在 Xunit 中获取内容值

】IActionResult类型返回结果时如何在Xunit中获取内容值【英文标题】:HowtogetcontentvalueinXunitwhenresultreturnedinIActionResulttype【发布时间】:2017-01-1516:11:00【问题描述】:我有一个使用Xunit的单元测试项目,我们正在测试的方法返回IActio... 查看详情

将自定义 HttpResponseMessage 作为 IActionResult 返回

】将自定义HttpResponseMessage作为IActionResult返回【英文标题】:ReturningcustomHttpResponseMessageasIActionResult【发布时间】:2020-05-2713:44:04【问题描述】:我有一个返回IActionResult的webapi。我像这样从这个api返回FileContentResultreturnnewFileContentR... 查看详情

如何测试返回 Ok(object) 的 ASP.NET Core 2.2 Web API GET IActionResult?

】如何测试返回Ok(object)的ASP.NETCore2.2WebAPIGETIActionResult?【英文标题】:HowtotestmyASP.NETCore2.2WebAPIGETIActionResultthatreturnsOk(object)?【发布时间】:2020-08-2609:09:15【问题描述】:在我的WebAPI中,我有一个简单的控制器操作:[HttpGet][Route("... 查看详情

ASP.NET Core API 中的 IActionResult vs ObjectResult vs JsonResult

】ASP.NETCoreAPI中的IActionResultvsObjectResultvsJsonResult【英文标题】:IActionResultvsObjectResultvsJsonResultinASP.NETCoreAPI【发布时间】:2018-03-3115:22:40【问题描述】:在将返回HTTPstatuscodes和JSON结果的WebAPI中使用的最佳选项是什么?我一直使用IA... 查看详情

在 .NET Core 中从 HttpResponseMessage 转换为 IActionResult

】在.NETCore中从HttpResponseMessage转换为IActionResult【英文标题】:ConvertfromHttpResponseMessagetoIActionResultin.NETCore【发布时间】:2019-01-0912:26:17【问题描述】:我正在将一些以前用.NETFramework编写的代码移植到.NETCore。我有这样的事情:Http... 查看详情

如何从通过 API 返回的 Task<IActionResult> 获取值以进行单元测试

】如何从通过API返回的Task<IActionResult>获取值以进行单元测试【英文标题】:HowtogettheValuesfromaTask<IActionResult>returnedthroughanAPIforUnitTesting【发布时间】:2018-06-1115:20:29【问题描述】:我使用ASP.NETMVCCorev2.1创建了一个API。我... 查看详情

在 .NET 5 中将 IActionResult 与 Azure Functions 一起使用?

】在.NET5中将IActionResult与AzureFunctions一起使用?【英文标题】:UsingIActionResultwithAzureFunctionsin.NET5?【发布时间】:2021-07-0618:23:56【问题描述】:将我的AzureFunctions项目迁移到.NET5后,它开始将我的响应包装在一个奇怪的包装类中。... 查看详情

在 .Net Core 2.2 中将 HttpResponseMessage 作为 IActionResult 返回的正确方法

】在.NetCore2.2中将HttpResponseMessage作为IActionResult返回的正确方法【英文标题】:CorrectwaytoreturnHttpResponseMessageasIActionResultin.NetCore2.2【发布时间】:2019-06-0518:48:17【问题描述】:在.NetCore2.2中。我正在创建一个API控制器,该控制器根... 查看详情

C# 异步任务 <IActionResult> 返回对象

】C#异步任务<IActionResult>返回对象【英文标题】:C#AsyncTask<IActionResult>returnObject【发布时间】:2019-06-1013:18:14【问题描述】:我正在尝试使用IActionResult接口来引发特定异常。但此时我被困在控制器上。我编写了以下代码... 查看详情

将开发人员异常页面显示为 IActionResult

】将开发人员异常页面显示为IActionResult【英文标题】:ShowdeveloperexceptionpageasIActionResult【发布时间】:2021-11-0419:00:22【问题描述】:在Startup.cs我有以下代码:if(env.IsDevelopment())app.UseDeveloperExceptionPage();elseapp.UseExceptionHandler("/Error")... 查看详情

IActionResult 或 async Task<IActionResult> 有啥好处?

】IActionResult或asyncTask<IActionResult>有啥好处?【英文标题】:IActionResultorasyncTask<IActionResult>whataretheadvantages?IActionResult或asyncTask<IActionResult>有什么好处?【发布时间】:2019-07-3012:18:50【问题描述】:我们将在dotnetcore2 查看详情

使用 Postman 上传 ASP Core WebApi 测试文件

...建了一个接收任意文件的端点:[HttpPost()]publicasyncTask<IActionResult>CreateFile(IFormFilefile)当我用Postman测试它时,file始终为空。 查看详情

如何在 WebApi 中添加和获取 Header 值

】如何在WebApi中添加和获取Header值【英文标题】:HowtoaddandgetHeadervaluesinWebApi【发布时间】:2014-02-1916:49:11【问题描述】:我需要在WebApi中创建一个POST方法,以便可以将数据从应用程序发送到WebApi方法。我无法获取标头值。这里... 查看详情

如何在 webapi 中配置 maxQueryStringLength?

】如何在webapi中配置maxQueryStringLength?【英文标题】:HowtoconfiguremaxQueryStringLengthinwebapi?【发布时间】:2018-07-2102:23:35【问题描述】:我在webapi中写了一个以json格式获取数据的方法。目前这项工作,但是当我通过另一个参数调用... 查看详情

如何在 WebAPI 后端 C# 上接收 JSON 数据?

】如何在WebAPI后端C#上接收JSON数据?【英文标题】:HowtoreceiveJSONdataonWebAPIbackendC#?【发布时间】:2015-09-1010:13:35【问题描述】:如何在C#中的WebAPI后端接收JSON数据?我的JavaScript前端发送了以下JSON。"User_Id":1,"TotalPrice":35,"DeliveryAddr... 查看详情

csharp如何在webapi中限制请求?(代码片段)

查看详情

Webapi 2.0如何在访问令牌过期时实现刷新JWT令牌

】Webapi2.0如何在访问令牌过期时实现刷新JWT令牌【英文标题】:Webapi2.0howtoimplementrefreshJWTtokenwhenaccesstokenexpired【发布时间】:2018-01-1811:39:34【问题描述】:我是WebAPI实现的新手,我创建了一个WebAPI服务以将其与ASP.netwebform应用程... 查看详情

如何回答请求但继续在 WebApi 中处理代码

】如何回答请求但继续在WebApi中处理代码【英文标题】:HowtoanswerarequestbutcontinueprocessingcodeinWebApi【发布时间】:2014-10-0602:24:57【问题描述】:我想回答请求,但继续处理代码。我尝试了类似的方法:[HttpPost]publicasyncTask<HttpRespo... 查看详情