我有课
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/