c# - 如何在 WebApi IActionResult Ok() 函数中删除可空小数的尾随零?
问题描述
我有一个 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,
}
是否有可能保持旧的行为?
解决方案
谢谢大家的回复,对我很有帮助:)
最后我在每个可以为空的小数上添加了一个注释?我认为我的需求需要它们的 TDO 对象的成员。它看起来像这样:
[JsonConverter(typeof(DecimalJsonConverter))]
public decimal? FielDecimalX { get; set; }
我写了一个类来处理这个解决方案中的转换
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,
}
希望这种变化不会破坏性能,但我没有看到任何问题。因此,我可以在我的请求中保存有效负载。希望能帮助到你 !
推荐阅读
- typescript - VS Code 上的打字稿显示任何类型而不是正确的类型
- sql - 如何在 SQL Server 中执行 group by 以获取特定输出
- javascript - 如何阻止在nodejs中导入javascript文件
- python - 如何安装特定版本的 socketio 4.4.0?
- python - 您可以在情节中更改子情节标题位置吗?
- java - 在java中创建一个存储字符串和整数的打印对象
- java - Payflow Pro:阻止重复发票 ID 不起作用
- python - 具有默认值的 Pydantic 字段?
- python - 网络刮刀使用python进行最后分页
- apache - 如何向 WHMCS 添加一些 url 重写?