C#XML序列化和十进制值

时间:2012-04-26 08:54:02

标签: c# xml xml-serialization decimal

我正在使用XmlSerializer将包含小数的C#对象序列化为xml字符串

e.g。

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

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

3 个答案:

答案 0 :(得分:2)

您是否可以实施IXmlSerializable来重新定义对象的序列化方式?

文档here以及如何对其进行详细分析here

然后有一个帖子here由某个与您有类似(但没有相关)问题的人发布。你可以正确地舍入你的小数,看看是否有效,如果没有,那么你可以把它写成一个字符串。

答案 1 :(得分:1)

我不认为舍入浮点数可以帮助这个。序列化程序根据自己的规则将数字转换为字符串。您可以做的最好的事情是引入一个新的字符串属性,并格式化该数字并将其序列化而不是原始数字。

有关该主题的更多信息,类似问题: Can you specify format for XmlSerialization of a datetime?

答案 2 :(得分:1)

以下是我解决类似问题的方法,它对我来说非常有效。

    private decimal  price;

    [XmlElement(DataType="decimal")]
    public string  Price
    {
        get { return price.ToString("c"); }
        set { price = Convert.ToDecimal(value); }
    }

就我而言,我将其转换为货币,但您可以使用price.ToString(“0.00”)将XML元素转换为带有2个零的十进制数。