的XmlSerializer:序列化元素的数组不同的元素名称字符串
问题描述:
我的阵列项目可以有不同的名称,但它们都有简单的字符串值,例如:的XmlSerializer:序列化元素的数组不同的元素名称字符串
<MyArray>
<TypeA>foo</TypeA>
<TypeA>bar</TypeA>
<TypeB>bazz</TypeB>
</MyArray>
如何实现这一目标?
我期待在MSDN上的文档在这里:https://msdn.microsoft.com/en-us/library/2baksw0z(v=vs.110).aspx
有看起来像我想要的一个例子,但我不能得到它的工作方式,他们说,这应该:
public class Employee {
public string Name;
}
public class Group {
[XmlArrayItem("MemberName")]
public Employee[] Employees;
}
生成的XML将按说是这样的:
<Group>
<Employees>
<MemberName>Haley</MemberName>
</Employees>
</Group>
然而,当我运行这个例子,我得到以下XML来代替:
<Group>
<Employees>
<MemberName>
<Name>Haley</Name>
</MemberName>
</Employees>
</Group>
我假设文档中有一个错误(我没有看到他们的代码中应该神奇地导致类Employee的值被它的Name属性的值替换),但是我我真的很想让我的XML看起来像他们的(错误的)例子。
答
当我发布问题时,我找到了解决方案:使用XmlTextAttribute。
在他们的例子中,Employee类应该是这样的:
public class Employee {
[XmlText]
public string Name;
}
在我的情况,我的集合可以包含类型A和类型B,其中每个类型具有带有[XMLTEXT]属性一个构件。
此外,这表明我不熟悉XML序列化,可以选择使用[XmlElement]而不是[XmlArray]装饰的项目数组,这会导致单个项目与最高级别属性一起序列化的类。这实际上是我真正需要的,所以我将它重写为[XmlElement] List MyTypeACollection {get; set;} [XmlElement] TypeB MyTypeB {get; set;} –