枚举的XML序列化为具有属性的元素

时间:2019-01-04 17:32:55

标签: .net xml-serialization

在我的.NET项目中,我使用标准的.NET XML序列化生成某些第三方代码的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序列化的深度并不十分了解,希望对如何简化这一过程有任何帮助或建议。

0 个答案:

没有答案