将十进制序列化为人类可读的货币格式

时间:2015-03-09 22:26:05

标签: c# json serialization currency

我正在使用json.net库来序列化一个具有代表成本的小数值的对象。序列化时,我希望json看起来像'$400,000'而不是'400000.0'

有没有办法可以轻松有效地完成这项工作?此对象包含许多其他辅助对象和后续属性。

应用程序将在本地使用,规格说输出应采用人类可读的格式。在这种情况下,文化差异并不重要。

2 个答案:

答案 0 :(得分:0)

没有简单的方法来执行此操作,因为您无法解决序列化程序直接访问您的属性的事实。

如果您需要格式化的JSON输出,我建议您编写一个包装您想要公开的类的帮助器类。不幸的是,我已经为一些XML报告做了一次,真的最简单的方法就是这样:

class PersonXml
{
   Person _person;

   void PersonXml(Person person) { _person = person; }

   string Age { get { return _person.Age + " years"; } }
}

这只是我在飞行中写的一个简单例子,但原理总是一样的。即使一些高级JSON序列化器为我提供了格式化输出的方法,我也真的将这个概念从我的主要对象中保存在一个单独的帮助器类的单独文件中。

同样,这不是解决方案,在我看来它应该永远不会出现,但如果确实存在,那么这就是我经历中的弊端。

另外,请注意,如果您在属性getter中引用该类,则存在空引用的危险。

答案 1 :(得分:0)

正如D Stanley建议的那样,我将字段类型从十进制更改为字符串,因为其中的数据仅被读取而不用于数据操作。