C # сериализует десятичное в xml - PullRequest
22 голосов
/ 23 октября 2009

Я получил десятичное свойство, как

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

Проблема в том, что я хочу, чтобы он всегда сериализовался с точностью до 2, но если цена равна 10.50, он будет сериализован в XML, как <Price>10.5</Price>.

Существует какой-либо способ его принудительного применения (без создания нового свойства или изменения получения этого свойства? Я ищу какой-либо способ сделать это, только отправив шаблон в XmlSerializer (или XmlElementAttribute) или любым разумным способом сделать это?

Спасибо

Ответы [ 2 ]

27 голосов
/ 16 марта 2010

У меня была противоположная проблема. Мои десятичные дроби были сериализованы с 4 десятичными разрядами, хотя все они были 4 нулями. Я обнаружил, что если я вызываю decimal.Round(value, 2), то он сериализуется до 2 десятичных знаков. Может показаться, что тип Decimal запоминает то, что вы в последний раз округлили и при сериализации

Я с подозрением относился к предложению, но это сработало просто. Несмотря на то, что значение не нуждается в округлении, вызов Round изменяет количество десятичных знаков, отображаемых в сериализации.

8 голосов
/ 23 октября 2009

Вы можете добавить XmlIgnore к фактическому десятичному свойству и ввести новое свойство PriceAsString, которое возвращает цену в виде строки (в формате 10,5 0 ).

Конечно, вы также можете реализовать IXmlSerializable и делать все самостоятельно.

Однако, ни один из этих способов на самом деле не сработал, и вы уже заявили, что не собираетесь идти по этому пути в любом случае ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...