Processamento JSON sem ruído com o Scala

Estou vindo de uma terra dotnet, mas recentemente estive analisando as possibilidades de linguagens de programação alternativas. Nada realmente sério, apenas alguns pedaços aqui e ali. Recentemente descobri o Scala e sou bastante fascinado por ele. Apesar de ajustes não determinísticos, eu fiz algumas verificações intermediárias de coisas importantes para mim em C # e me sinto bastante satisfeito: noções funcionais - tick, polimorfismo ad-hoc - tick, anotações - tick, reflexão e codegen - tick.

Agora, estou pensando em como programar um análogo da biblioteca de processamento JSON que implementei no C # 4.0 com a ajuda do DLR e do açúcar sintático "dinâmico". Aqui está o conjunto de recursos que estou procurando:

Navegação e construção convenientes de JSON bruto.Conversão automática entre JSON e objetos / coleções nativos (em sua forma geral, o problema é insolúvel, embora se possa definir convenções que funcionem 95% do tempo - e isso é bom para mim).

Os novos recursos do C # 4.0 meio que são ótimos aqui, já que me permitem substituir o acesso dos membros e digitar casts para executar uma lógica completamente personalizada (se uma variável no C # 4.0 for digitada como "dinâmica", qualquer coisa que você faça com ele será compilada em chamadas para métodos definidos pelo programador com comportamento padrão razoável - consulteMétodos DynamicMetaObject.BindXXX no MSDN para mais informações). Por exemplo. Eu substituí o tipo de conversão para serializar / desserializar objetos .NET e acessos de membros para gerenciar JSON bruto, para que eu possa escrever o seguinte código:

var json = Json.Get("http://some.service");
if (json.foo) Console.WriteLine((Foo)json.foo);
json.bars = ((List<Bar>)json.bars).DoSomething();

Obviamente, isso não é ideal, pois a ligação dinâmica no C # 4.0 tem problemas com métodos de extensão e inferência de tipo e, além disso, o código ainda parece bastante pesado. De qualquer forma, isso é muito melhor do que usar todos esses ((JsonObject) json ["quux"]) ["baz"] que eu usei no c # 3.5.

Algumas pesquisas básicas mostram que o Scala não possui recursos de idioma dedicados que suportam ligações tardias. No entanto, existem tantos truques que talvez eles possam ser usados juntos para criar uma emulação suportável do código mostrado acima (ou até para ser melhor - quase tenho certeza de que isso é possível). Poderia, por favor, me aconselhar alguma coisa aqui?

questionAnswers(6)

yourAnswerToTheQuestion