voglio deserialise un oggetto che include una matrice di una certa interfaccia Entity
:Unmarshal una matrice JSON di struct eterogenei
type Result struct {
Foo int;
Bar []Entity;
};
Entity
è un'interfaccia implementata da un certo numero di tipi struct. I dati JSON identificano il tipo di struttura con un campo "tipo" in ciascuna entità. Per esempio.
{"type":"t1","field1":1}
{"type":"t2","field2":2,"field3":3}
Come potrei fare per deserialising tipo Result
in modo tale che si popola correttamente la matrice. Da quello che posso vedere, devo:
- Implementare
UnmarshalJSON
suResult
. - Parse
Bar
come[]*json.RawMessage
. - Analizza ogni messaggio non elaborato come
map[string]interface{}
. - Controllare il campo "tipo" nel messaggio non elaborato.
- Creare una struttura di tipo appropriato.
- Analizza il messaggio non elaborato di nuovo, questa volta nella struttura appena creata.
Questo suona tutto molto noioso e noioso. C'è un modo migliore per farlo? O lo sto facendo all'indietro, e c'è un metodo più canonico per gestire una serie di oggetti eterogenei?
Ho finito con una struttura "unione". Sembrava sporco, ma alla fine è stato liberatorio. –