Configurando o Contrato de Dados WCF para Resposta JSON Correta

Eu gerencio vários sites de Bed & Breakfast e gero um tipo de mecanismo de reserva para ajudar o cliente a fazer reservas diretamente em seu site (em vez de ir para outro site para fechar o negócio).

Estou trabalhando na criação de um serviço da Web usando o ASP.NET WCF para criar uma resposta JSON sobre a disponibilidade de quartos dos hotéis que administro. Eu configurei o serviço da web para serializar a resposta em JSON. Tudo funciona razoavelmente bem, EXCETO Eu não consigo construir os objetos adequados para obter a resposta JSON desejada.

Para fazer a transferência corretamente, sou obrigado a retornar uma resposta JSON estruturada da seguinte maneira:

{
"api_version" : 10 ,
"lang" : "en_US",
"hotels" :
    [
        {
            "name" : "Example Hotel",
            "email" : "[email protected]",
            "phone" : "555-555-5555",
            "fax" : "555-555-5555",
            "room_types"  :
                {
                    "Orchid Room" :
                        {
                            "url" : "http://hotel.com/orchid",
                            "desc" : "One queen bed etc."
                        },
                    "Presidential Suite" :
                        {
                            "url" : "http://hotel.com/predidential",
                            "desc" : "One king bed etc."
                        }
                }
        }
    ]
}

Não tenho problema em configurar meu serviço WCF para retornar objetos na serialização JSON. No entanto, onde estou confuso é como construir a parte "room_types" do objeto. Agora, o problema é que, para cada hotel no meu sistema, terei DIFERENTES tipos de quarto, portanto, de alguma forma, preciso gerar dinamicamente o objeto room_types. Mas não sei estruturar os objetos corretamente.

Aqui estão os contratos de dados que eu configurei até agora e que não serializam corretamente no JSON:

<DataContract()>
Public Class InventoryResponseObject
        <DataMember(order:=0)> Public Property api_version As Integer
        <DataMember(order:=1)> Public Property lang As String
        <DataMember(order:=2)> Public Property hotels As hotelsObject
        <DataMember(order:=3)> Public Property errors As List(Of String)

End Class

<CollectionDataContract()>
Public Class hotelsObject
        Inherits List(Of HotelObject)
        Public Sub New()
        End Sub

End Class

<DataContract()>
Public Class HotelObject
        <DataMember(order:=0)> Public Property name As String
        <DataMember(order:=1)> Public Property email As String
        <DataMember(order:=2)> Public Property phone As String
        <DataMember(order:=3)> Public Property fax As String
        <DataMember(order:=4)> Public Property room_types As RoomTypeCollectionObject

End Class

<DataContract()>
Public Class RoomTypeInfoObject
        <DataMember(order:=0)> Public Property url As String
        <DataMember(order:=1)> Public Property desc As String

End Class

<CollectionDataContract()>
Public Class RoomTypeCollectionObject
        Inherits List(Of RoomTypeInfoObject)
        Public Sub New()
        End Sub

End Class

Isso produzirá a seguinte reabertura JSON incorreta:

{
"api_version" : 10 ,
"lang" : "en_US",
"hotels" :
    [
        {
            "name" : "Example Hotel",
            "email" : "[email protected]",
            "phone" : "555-555-5555",
            "fax" : "555-555-5555",
            "room_types"  :[
                        {
                            "url" : "http://hotel.com/orchid",
                            "desc" : "One queen bed etc."
                        },
                        {
                            "url" : "http://hotel.com/predidential",
                            "desc" : "One king bed etc."
                        }
                ]
        }
    ]
}

Estou perplexo. Qualquer ajuda seria muito apreciada.

questionAnswers(2)

yourAnswerToTheQuestion