В моем проекте .NET я использую стандартную сериализацию XML .NET для генерации файлов XML для определенного стороннего кода. Это означает, что я не могу ничего изменить в макете файла XML.
У меня нет проблем с созданием атрибутов элемента XML со значениями, взятыми из перечисления, например,
enum BarType
{
SimpleBar,
ComplexBar
}
class Foo
{
[XmlAttribute]
public BarType BarType;
}
для создания
<Foo BarType="SimpleBar"/>
используя код типа
var foo = new Foo() { BarType = BarType.SimpleBar };
Однако это не то, чего мне нужно достичь.
Есть ли простой способ генерирования вместо этого что-то вроде
<Foo>
<BarType Type="SimpleBar" />
</Foo>
чтобы я мог использовать тот же простой код для установки BarType?
Пока у меня есть что-то вроде этого:
class Foo
{
public EnumElementWithTypeAttribute<BarType> BarType;
}
с EnumElement, определенным как
class EnumElementWithTypeAttribute<T>
{
[XmlAttribute]
public T Type;
}
и затем создайте экземпляр Foo с этим уродливым кодом:
var foo = new Foo() { BarType = new EnumElementWithTypeAttribute<BarType>(BarType.SimpleBar) };
Это не только некрасиво, но так как у меня на самом деле много таких свойств, это довольно утомительно (это также причина для универсального). В идеале я хотел бы представить что-то вроде
class Foo
{
[Something(ElementName:="BarType", AttributeName:="Type")]
public BarType BarType;
}
, который скажет сериализатору создать элемент с заданным именем и атрибутом, который принимает значения из базового перечисления.
Я не очень разбираюсь в глубинах сериализации XML и был бы признателен за любую помощь или предложение, как это упростить.