C#将十进制序列化为xml

Raf*_*ler 22 c# xml serialization

我有一个十进制属性,就像

[XmlElementAttribute(DataType = "decimal")] decimal Price

问题是我想强制它始终以2的精度序列化,但如果价格是10.50,它将被序列化为XML <Price>10.5</Price>.

有什么方法可以强制它(没有创建新属性或更改此属性的获取?我正在寻找一些方法来执行此操作只将模式发送到XmlSerializer(或XmlElementAttribute)或任何智能方法来执行此操作?

谢谢

Jim*_*eth 27

我遇到了相反的问题.我的小数字序列化为4位小数,即使它们都是4个零.我发现,如果我打电话,decimal.Round(value, 2)它会序列化为2位小数.似乎Decimal类型在序列化时会记住你最后舍入的内容.

我对这个建议持怀疑态度,但这很简单.即使该值不需要舍入,调用Round也会更改序列化中显示的小数位数.

  • 如果你有一个1dp的小数,并且你尝试将其四舍五入为2,则不起作用. (3认同)
  • 我这样做:decimal.Round(value*1.00m,2) (2认同)

maf*_*afu 8

您可以添加XmlIgnore到实际的十进制属性并引入一个新属性PriceAsString,它返回eh,价格为字符串(10.5 0格式).

你当然也可以IXmlSerializable自己实现并做好一切.

然而,这些方式都没有真正发挥作用,而且你已经表明你无论如何也不会走这条路......