Подтвердить что ты не робот

С# сериализовать десятичную дробь в xml

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

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

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

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

Спасибо

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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