C#将十进制序列化为xml
我有一个小数属性,就像
[XmlElementAttribute(DataType = "decimal")] decimal Price
问题是我想强制它始终以2的精度序列化,但如果价格是10.50,它将被序列化为XML,如10.5
。
有什么方法可以强制它(没有创建新属性或更改此属性的获取?我正在寻找一些方法来执行此操作只将模式发送到XmlSerializer(或XmlElementAttribute)或任何聪明的方法来执行此操作?
谢谢
您可以将XmlIgnore
添加到实际的十进制属性,并引入一个新属性PriceAsString,它将价格作为字符串返回(格式为10.5 0 )。
您当然也可以实现IXmlSerializable
并自己完成所有事情。
然而,这些方式都没有真正发挥作用,而且你已经说过你无论如何也不会走这条路……
我遇到了相反的问题。 我的小数是序列化的4位小数,即使它们都是4个零。 我发现如果我调用decimal.Round(value, 2)
那么它会序列化为2位小数。 似乎Decimal类型在序列化时会记住你最后舍入的内容。
我对这个建议持怀疑态度,但这很简单。 即使该值不需要舍入,调用Round也会更改序列化中显示的小数位数。