Procesamiento JSON sin ruido con Scala

Vengo de un país dotnet, pero recientemente he estado buscando las posibilidades de lenguajes de programación alternativos. Nada realmente serio, solo algunas partes aquí y allá. Recientemente descubrí Scala y estoy bastante fascinado con él. A pesar de los ajustes no deterministas, he realizado algunas comprobaciones intermedias de cosas que son importantes para mí en C # y me siento bastante satisfecho: nociones funcionales: tic, polimorfismo ad hoc: tic, anotaciones, tic, reflexión y codegen.

Ahora estoy pensando en cómo programar uno análogo de la biblioteca de procesamiento JSON que implementé en C # 4.0 con la ayuda de DLR y azúcar sintáctico "dinámico". Aquí está el conjunto de características que estoy buscando:

Navegación conveniente y construcción de JSON sin procesar.Conversión automática entre JSON y objetos / colecciones nativas (en su forma general, el problema no tiene solución, aunque se pueden definir convenciones que funcionarán el 95% del tiempo, y eso está bien para mí).

Las nuevas características de C # 4.0 son algo geniales aquí, ya que me permiten anular el acceso de miembros y escribir conversiones para realizar una lógica completamente personalizada (si una variable en C # 4.0 se escribe como "dinámica", entonces todo lo que hagas con él se compilará en llamadas a métodos definidos por el programador con un comportamiento predeterminado razonable - verMétodos DynamicMetaObject.BindXXX en MSDN para más información). P.ej. He anulado los tipos de conversión para serializar / deserializar objetos .NET y accesos de miembros para administrar JSON sin formato, de modo que pueda escribir el siguiente código:

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

Por supuesto, esto no es ideal, ya que el enlace dinámico en C # 4.0 tiene problemas con los métodos de extensión y la inferencia de tipos, y, además, el código todavía se siente bastante pesado. Pero de todos modos, esto es mucho mejor que usar todos esos ((JsonObject) json ["quux"]) ["baz"] que he usado en c # 3.5.

Algunas investigaciones básicas muestran que Scala no tiene características de lenguaje dedicadas que admitan el enlace tardío. Sin embargo, hay tantos trucos que tal vez se puedan usar juntos para crear una emulación soportable del código que se muestra arriba (o incluso para ser mejor, estoy casi seguro de que esto es posible). ¿Podría, por favor, aconsejarme algo aquí?

Respuestas a la pregunta(6)

Su respuesta a la pregunta