Suporte do ServiceStack para omitir condicionalmente campos de uma resposta REST em uma base por chamada

<TL;DR>

No mínimo, estou procurando uma maneira de excluir condicionalmente determinadas propriedades do recurso de serem incluídas na resposta em uma base por chamada (consultefields abaixo).

Idealmente, gostaria de implementar um serviço REST com ServiceStack que suporte todos os principais pontos abaixo.

ATUALIZAR
Embora eu realmente goste da abordagem do ServiceStack em geral e prefira usá-lo, se possível, se não for particularmente adequado para essas idéias, prefiro não me curvar para trás para fazê-lo funcionar. Se for esse o caso, alguém pode apontar para outro framework c # que pode ser mais apropriado? Eu estou ativamente explorando outras opções, claro.

</TD;DR>

Nissoconversa intituladoCriando APIs REST + JSON, o apresentador descreve sua estratégia para Referências de Recursos (viahref propriedade em recursos) em JSON. Além disso, ele descreve dois parâmetros de consulta (fields eexpand) para controlar quais dados são incluídos na resposta de uma chamada para um serviço REST. Eu tenho tentado, sem sucesso, mergulhar na estrutura do ServiceStack para obter suporte parafields em particular, mas até agora não tiveram sucesso. Isso é atualmente possível no ServiceStack? Idealmente, a solução seria independente do formato e, portanto, funcionaria em todos os formatos de saída suportados pelo ServiceStack. Eu imaginariaexpand seguiria a mesma estratégia.

Vou descrever esses recursos aqui, mas acho que a conversa no link faz um trabalho melhor de explicá-los.

Vamos dizer que temos um recurso de perfis com as seguintes propriedades:givenName, surname, genderefavColor. O recurso Perfis também inclui uma lista de redes sociais à qual o usuário pertencesocialNetworks propriedade.

href - (42:22 em vídeo) Cada recurso inclui um link completo para ele no serviço REST. Uma chamada paraGET /profiles/123 retornaria

{
    "href":"https://host/profiles/123",
    "givenName":"Bob",
    "surname":"Smith",
    "gender":"male",
    "favColor":"red",
    "socialNetworks": {
        "href":"https://host/socialNetworkMemberships?profileId=123"
    }
}

Observe que osocialNetworks property retorna um objeto apenas com o valor href preenchido. Isso mantém a resposta curta e focada, além de fornecer ao usuário final informações suficientes para fazer outras solicitações, se desejar. ohref A propriedade, usada em toda a linha nessa mansão, torna fácil (conceitualmente, de qualquer maneira) reutilizar estruturas de dados de recursos como filhos de outros recursos.

fields - (55:44 em vídeo) Parâmetro de string de consulta que instrui o servidor a incluir apenas as propriedades especificadas do recurso desejado na resposta REST.

Uma resposta normal deGET /profiles/123 incluiria todas as propriedades do recurso, como visto acima. Quando ofields query param está incluído na solicitação, apenas os campos especificados são retornados. 'GET / propfiles / 123? Fields = sobrenome, favColor' retornaria

{
    "href":"https://host/profiles/123",
    "surname":"Smith",
    "favColor":"red"
}

expand - (45:53 em vídeo) Parâmetro de string de consulta que instrui o servidor a detalhar os recursos filho especificados no resultado. Usando nosso exemplo, se você fosse ligarGET /profiles/123?expand=socialNetworks você pode receber algo como

{
    "href":"https://host/profiles/123",
    "givenName":"Bob",
    "surname":"Smith",
    "gender":"male",
    "favColor":"red",
    "socialNetworks": {
        "href":"https://host/socialNetworkMemberships?profileId=123",
        "items": [
            { 
                "href":"https://host/socialNetworkMemberships/abcde",
                "siteName":"Facebook",
                "profileUrl":"http://www.facebook.com/..."
            },
            ...
        ]
    }
}

questionAnswers(2)

yourAnswerToTheQuestion