有一个WCF服务,它有一个带有自定义节点的DataMember(项目的名称和数量可能不同) 例如:
<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 :(得分:1)
将AppData
保留为XElement
- 然后当您准备好发送数据时,只需创建一个新的XElement
将列表传递给它 - 它将创建一个包含许多子元素的父级列表中每个XElemen
t一个。 XElemen
t的构造函数是IEnumerable<XElement>
知道
答案 1 :(得分:1)
由于您的XML数据blob具有名为<AppData>
的根元素,并且包含它的WCF数据成员也称为AppData
,因此暗示该序列化消息应该有两个嵌套元素,因此:
<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数据协定成员。