Сериализация списка WCF MessageContract - PullRequest
0 голосов
/ 29 октября 2010

У меня есть следующие MessageContracts для использования в качестве запроса:

<MessageContract(WrapperName:="get")> _
Public Class GetRequest
    Inherits BaseAuthenticatedRequest

    Protected _typeName As cEnum.eType
    Protected _id As Integer

    <MessageBodyMember()> _
    Public Property TypeName() As cEnum.eType
    ...

    <MessageBodyMember()> _
    Public Property Id() As Integer
    ...
End Class

<MessageContract(WrapperName:="getLimited")> _
Public Class GetLimitedRequest
    Inherits GetRequest

    Protected _propertyList As List(Of String)

    <MessageBodyMember(Namespace:=Api2Information.Namespace)> _
    Public Property PropertyList() As List(Of String)
    ...
End Class

Но при тестировании в SoapUI тело запроса getLimited создается как:

  <v2:getLimited>
     <!--Optional:-->
     <v2:Id>?</v2:Id>
     <!--Optional:-->
     <v2:PropertyList>
        <!--Zero or more repetitions:-->
        <arr:string>?</arr:string>
     </v2:PropertyList>
     <!--Optional:-->
     <v2:TypeName>?</v2:TypeName>
  </v2:getLimited>

Где v2 = Api2Information.Namespace.Что мне действительно нужно, так это чтобы строки, содержащиеся в PropertyList, были расположены в пространстве имен как v2, а не arr.Есть ли для меня способ достичь этого?Я конвертирую сервис ASMX для использования WCF, и у нас есть несколько приложений, в которых мы не можем позволить себе перекомпилировать и распространять.

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 29 октября 2010

Я нашел то, что искал.Используя пользовательский тип коллекции, такой как:

<CollectionDataContract(Namespace:=Api2Information.Namespace)> _
Public Class PropertyList : Inherits List(Of String)

End Class

и заменяя его вхождения в моих контрактах, например:

<MessageContract(WrapperName:="getLimited")> _
Public Class GetLimitedRequest
    Inherits GetRequest

    Protected _propertyList As PropertyList

    <MessageBodyMember(Namespace:=Api2Information.Namespace)> _
    Public Property PropertyList() As PropertyList
    ...
End Class

Создает вывод:

  <v2:getLimited>
     <!--Optional:-->
     <v2:Id>?</v2:Id>
     <!--Optional:-->
     <v2:PropertyList>
        <!--Zero or more repetitions:-->
        <v2:string>?</v2:string>
     </v2:PropertyList>
     <!--Optional:-->
     <v2:TypeName>?</v2:TypeName>
  </v2:getLimited>
...