2012-02-20 112 views
1

有一个WCF服务,其具有与自定义节点数据成员(物品的名称和编号可能不同) 实施例:WCF的XmlElement序列化/反序列化

<AppData> 
<sometag>something</sometag> 
<othertag>something else</othertag> 
</AppData> 

成员定义为:

<DataMember(IsRequired:=False)> 
    Public AppData As XmlElement 

它只适用于一件物品。

定义,如:类名称标签

<DataMember(IsRequired:=False)> 
    Public AppData As List(Of XmlElement) 

包裹内标签:

<AppData> 
<XmlElement><sometag>something</sometag></XmlElement> 
<XmlElement><othertag>something else</othertag></XmlElement> 
</AppData> 
+0

对我来说,解决方案是使用属性: 公共AppData的作为的XmlElement – 2012-02-20 12:56:56

回答

1

保持AppDataXElement - 然后当你准备发送的数据只需要创建一个新的XElement传球它的列表 - 它将为列表中的每个XElemen t创建一个包含许多子元素的父项。对于XElemen吨的构造是IEnumerable<XElement>知道

1

由于XML数据的blob有一个名为<AppData>根元素,包含它也被称为AppData的WCF数据成员,那么意味着的序列化消息应该有两个嵌套元素,即:

<AppData> <!-- this maps to the WCF DataMember field --> 
    <AppData> <!-- this is the root element of your blob --> 
     <sometag>something</sometag> 
     <othertag>something else</othertag> 
    </AppData> 
</AppData> 

与你必须在此刻,解串器是看到了一个<AppData>元素,并假设它是WCF数据成员Public AppData As XmlElement。然后,它在该元素的内部查找并找到两个子元素<sometag><othertag>。然而,它只被告知寻找一个元素(XmlElement),所以它忽略了第二个元素。

您应该考虑更改XML blob的架构或包含它的WCF数据协定成员。

+0

非常感谢您的回答,我找到了解决办法:这是属性的类型定义。 – 2012-02-20 13:00:09