繁体   English   中英

如何在WebApi IActionResult Ok()函数中删除可为空的十进制结尾的零?

[英]How to remove trailing zeros of nullable decimal in WebApi IActionResult Ok() function?

我有一个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,
}

希望性能不会因此更改而中断,但是我看不到任何问题。 因此,我可以在请求中节省有效载荷。 希望能帮助到你 !

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM