在我的.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序列化的深度并不十分了解,希望对如何简化这一过程有任何帮助或建议。