gpt4 book ai didi

c# - 将小数序列化为 JSON,如何四舍五入?

转载 作者:IT老高 更新时间:2023-10-28 12:55:57 26 4
gpt4 key购买 nike

我有课

public class Money
{
public string Currency { get; set; }
public decimal Amount { get; set; }
}

并希望将其序列化为 JSON。如果我使用 JavaScriptSerializer 我得到

{"Currency":"USD","Amount":100.31000}

由于 API 我必须符合需要最多两位小数的 JSON 数量,我觉得应该可以以某种方式改变 JavaScriptSerializer 序列化小数字段的方式,但我可以'不知道怎么做。有SimpleTypeResolver您可以传入构造函数,但据我所知,它仅适用于类型。 JavaScriptConverter ,您可以通过 RegisterConverters(...) 添加似乎是为 Dictionary 制作的。

我想得到

{"Currency":"USD","Amount":100.31}

在我序列化之后。此外,更改为 double 是不可能的。我可能需要做一些四舍五入(100.311 应该变成 100.31)。

有人知道怎么做吗? JavaScriptSerializer 是否有替代方法可以让您更详细地控制序列化?

最佳答案

到目前为止,我对实现这一目标的所有技术并不完全满意。 JsonConverterAttribute 似乎是最有前途的,但我无法忍受硬编码的参数和针对每种选项组合的转换器类的激增。

所以,我提交了 PR这增加了将各种参数传递给 JsonConverter 和 JsonProperty 的能力。它已被上游接受,我预计将在下一个版本中发布(无论是 6.0.5 之后的下一个版本)

然后你可以这样做:

public class Measurements
{
[JsonProperty(ItemConverterType = typeof(RoundingJsonConverter))]
public List<double> Positions { get; set; }

[JsonProperty(ItemConverterType = typeof(RoundingJsonConverter), ItemConverterParameters = new object[] { 0, MidpointRounding.ToEven })]
public List<double> Loads { get; set; }

[JsonConverter(typeof(RoundingJsonConverter), 4)]
public double Gain { get; set; }
}

请参阅 CustomDoubleRounding()测试一个例子。

关于c# - 将小数序列化为 JSON,如何四舍五入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12283070/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com