2017-12-12 4 views
1

Ich benutze ScalaJs eckig und Upickle und ich versuche, einen Filter zu erstellen, um eine unbekannte Klasse in JSON zu transformieren.Wie ich eine generische Lösung habe, um eine unbekannte Klasse nach Json in scalaJs zu analysieren

Was ich versucht:

mein -umfang:

var myScope: MyClass = js.native 

mein Filter:

@injectable("copy") 
class CopyFilter extends Filter[Any] { 

    override def filter(any: Any): js.Dynamic = { 
    val myClass = any.getClass 
    fromClassToJsValue[myClass](any) 
    } 
} 

meine Funktion

def fromClassToJsValue[A](value: A)(implicit serializer: Writer[A]): js.Dynamic = 
JSON.parse(write(value)) 

In diesem Fall mein Problem ist getClass die Class[_] und nicht MyClass

Gibt es eine Lösung MyClass zu finden gibt? (Oder vielleicht eine andere Lösung, um einen Typ Any abzuleiten?)

+0

Verwenden von 'Any' ist eine schlechte Praxis an sich – cchantep

+0

es ist wahr, aber ich muss Any für diesen Fall verwenden, wenn ich nicht einen Filter für jede Fallklasse schreiben möchte ... –

+0

Nicht mit 'Any' ist nicht widersprüchlich mit Generika – cchantep

Antwort

3

Grob gesagt ist uPickle nicht dafür ausgelegt; Ich glaube auch nicht, dass einer der anderen JSON-Serialisierer ist. Diese Art der Any-friendly-Serialisierung basiert normalerweise auf Reflektion, die in der JavaScript-Umgebung meist nicht verfügbar ist.

Ich vermute, dass Sie einen Filter pro Fallklasse benötigen, obwohl wahrscheinlich ein Einzeiler. (Möglicherweise als Basismerkmal, das Sie in die Fallklassen selbst mischen, aber ich weiß nicht Angular, also weiß ich nicht, wie die Einschränkungen aussehen.)

Verwandte Themen