2017-04-10 64 views
0

我的阵列项目可以有不同的名称,但它们都有简单的字符串值,例如:的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看起来像他们的(错误的)例子。

回答

0

当我发布问题时,我找到了解决方案:使用XmlTextAttribute。

在他们的例子中,Employee类应该是这样的:

public class Employee { 
    [XmlText] 
    public string Name; 
} 

在我的情况,我的集合可以包含类型A和类型B,其中每个类型具有带有[XMLTEXT]属性一个构件。

+0

此外,这表明我不熟悉XML序列化,可以选择使用[XmlElement]而不是[XmlArray]装饰的项目数组,这会导致单个项目与最高级别属性一起序列化的类。这实际上是我真正需要的,所以我将它重写为[XmlElement] List MyTypeACollection {get; set;} [XmlElement] TypeB MyTypeB {get; set;} –

相关问题