Самая изящная сериализация XML цветовой структуры

Одна проблема прослушивала меня достаточно для регистрации на Переполнении стека. В настоящее время, если я хочу сериализировать Цвет к строке XML как именованный цвет, или #rrggbb, или #aarrggbb, Я делаю это как это:

[XmlIgnore()]
public Color color;

[XmlElement(ElementName = "Color")]
public String color_XmlSurrogate
{
  get { return MyColorConverter.SetColor(color); }
  set { color = MyColorConverter.GetColor(value); }
}

Здесь MyColorConverter делает сериализацию просто способ, которым мне нравится она. Но все это чувствует себя подобно клуджу с дополнительным полем и так далее. Существует ли способ заставить его работать в меньшем количестве строк, возможно, соединяя TypeDescriptor с атрибутами C#, связанными с XML?

36
задан Grokify 13 June 2018 в 05:37
поделиться

1 ответ

Боль, не правда ли? Это все, что вы можете сделать с XmlSerializer , если вы не реализуете IXmlSerializable (что я не рекомендую ). Параметры:

  • придерживайтесь этого, но также отметьте color_XmlSurrogate как [Browsable (false), EditorBrowsable (EditorBrowsableState.Never)] - это перестанет отображаться в большинстве привязок данных представлений, а в редакторе кода при ссылке на вашу сборку как dll
  • используйте DataContractSerializer , который поддерживает частные свойства (но который не поддерживает атрибуты xml; вы можете ' t win ...)

кстати, я бы использовал цвет как свойство, а не поле:

[XmlIgnore]
public Color Color {get;set;}
5
ответ дан 27 November 2019 в 05:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: