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;
    }

如何确保小数点后仅输出两个值

C# XML 序列化和十进制值

你能实现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 格式吗?