C# XML 序列化和十进制值
本文关键字:十进制 序列化 XML | 更新日期: 2023-09-27 18:32:14
我正在使用 XmlSerializer 序列化一个 C# 对象,该对象包含一个十进制到一个 xml 字符串
例如
AnObject.ADecimalValue
我发现即使我明确四舍五入,精度也会有所不同,因为下面的一些值在点之后获得四个值的输出,例如 12564.39 输出为 12564.3900
AnObject.ADecimalValue = decimal.Round(AnObject.ADecimalValue, 2);
序列化代码如下。
XmlSerializer serializer = new XmlSerializer(typeof(AnObject));
using (StringWriter writer = new StringWriter())
{
serializer.Serialize(writer, source);
string result = writer.ToString();
return result;
}
如何确保小数点后仅输出两个值
你能实现IXmlSerializable
来重新定义你如何序列化你的对象吗?
此处提供文档,并在此处很好地分解了如何实现它。
然后这里有一个帖子,有人与你有类似(但不相关)的问题。您可以正确舍入小数,看看是否有效,如果不起作用,则可以将其写为字符串。
这是我解决类似问题的方法,它对我来说非常有效。
private decimal price;
[XmlElement(DataType="decimal")]
public string Price
{
get { return price.ToString("c"); }
set { price = Convert.ToDecimal(value); }
}
就我而言,我将其转换为货币,但您可以使用价格。ToString("0.00") 将 XML 元素转换为带 2 个零的十进制。
我认为四
舍五入浮点数对此无济于事。序列化程序根据自己的规则将数字转换为字符串。你能做的最好的事情就是引入一个新的字符串属性,并格式化其中的数字并序列化它而不是原始数字。
更多关于这个话题,类似的问题:您可以指定日期时间的 XmlSerialization 格式吗?