如何在 WebApi IActionResult Ok() 函数中删除可空小数的尾随零?
Posted
技术标签:
【中文标题】如何在 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.400000
和 17.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,
希望此更改不会破坏性能,但我看不出有任何问题。因此,我可以在我的请求中保存有效负载。 希望对您有所帮助!
【讨论】:
以上是关于如何在 WebApi IActionResult Ok() 函数中删除可空小数的尾随零?的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Core API 中的 IActionResult vs ObjectResult vs JsonResult
IActionResult 或 async Task<IActionResult> 有啥好处?
如何测试返回 Ok(object) 的 ASP.NET Core 2.2 Web API GET IActionResult?