Как использовать DataContract для сериализации числа в процентах в выводе XML? - PullRequest
0 голосов
/ 25 апреля 2011

Мне интересно, могу ли я настроить вывод xml так, как это делает ToString.Например, используйте% для вывода 80%, а не 0,8. Мне также нужно десериализовать его позже ...

Спасибо.

1 Ответ

1 голос
/ 14 мая 2011

Не сериализуйте свойство с номером напрямую. Вместо этого создайте фиктивное свойство строки, которое форматирует и анализирует число:

[DataContract]
public class MyClass
{
    // No DataMember attribute here
    public double MyProperty { get; set; }

    // Serialize this property instead
    [DataMember(Name = "MyProperty")]
    private string MyPropertyXml
    {
        get { return MyProperty.ToString("P", CultureInfo.InvariantCulture); }
        set
        {
            if (string.IsNullOrEmpty(value))
            {
                MyProperty = 0;
            }
            else
            {
                string s = value.TrimEnd('%', ' ');
                MyProperty = double.Parse(s, CultureInfo.InvariantCulture) / 100;
            }
        }
    }
}

Создает следующий вывод:

<?xml version="1.0" encoding="utf-16"?>
<MyClass xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/">
  <MyProperty>42.00 %</MyProperty>
</MyClass>
...