2012-02-20 5 views
1

У службы WCF, которая имеет DataMember с пользовательскими узлами (имена и номера деталей могут быть различными) Пример: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

Решение для меня было с помощью атрибут: Public AppData Как XmlElement –

ответ

1

Keep AppData как XElement - тогда, когда вы будете готовы отправить данные просто создать новый XElement прохождение список для него - он создаст родителя со многими дочерними элементами по одному для каждого XElemen t в списке. Конструктор XElemen Т IEnumerable<XElement> известен

1

Поскольку ваши блобы данные XML имеет корневой элемент с именем <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> 

с чем у вас есть в данный момент, deserialiser видит один <AppData> элемент, и при условии, что он является членом Public AppData As XmlElement данных WCF. Затем он просматривает этот элемент и находит два дочерних элемента: <sometag> и <othertag>. Однако было сказано, что нужно искать один элемент (XmlElement), поэтому он игнорирует второй.

Вы должны посмотреть на изменение либо схемы вашего блога XML, либо члена договора контракта WCF, который его содержит.

+0

Большое спасибо за ваш ответ, я нашел решение: это атрибут для определения типа. –

Смежные вопросы