代码之家  ›  专栏  ›  技术社区  ›  Rafael Mueller

将十进制序列化为XML

  •  21
  • Rafael Mueller  · 技术社区  · 15 年前

    我有一个十进制的属性,比如

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

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

    有什么方法可以强制它(不创建新属性或更改此属性的get?我正在寻找一种方法来实现这一点,只需将模式发送到xmlserializer(或xmlementattribute)或任何智能方法来实现这一点?

    谢谢

    2 回复  |  直到 11 年前
        1
  •  8
  •   mafu    15 年前

    你可以添加 XmlIgnore 引入一个新的属性price as string,它返回字符串形式的价格(10.5 格式)。

    当然,您也可以实现 IXmlSerializable 你自己做每件事。

    然而,这些方法都不是真正的石头,而且你已经说过你无论如何都不会沿着这条路走…

        2
  •  26
  •   Jim McKeeth    15 年前

    我遇到了相反的问题。我的小数是4位小数,即使它们都是4个零。我发现如果我打电话 decimal.Round(value, 2) 然后它序列化为2个小数位。似乎十进制类型 记得 当它被序列化时,您最后一次舍入它的内容也是如此。

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