Gibt es eine Möglichkeit, benutzerdefinierte Strukturen beim Kodieren/Dekodieren mit Json zu serialisieren?Golang benutzerdefinierte JSON-Serialisierung (tut etwas äquivalent zu gob.register() existieren für Json?)
sagen Sie 3 haben unterschiedliche individuelle structs (in meinem eigentlichen Code dort 10 sind), die über UDP gesendet werden, und Sie verwenden json zur Codierung:
type a struct {
Id int
Data msgInfo
}
type b struct {
Id int
Data msgInfo
Other metaInfo
}
type c struct {
Other metaInfo
}
Am recieving Ende Sie wissen wollen, ob Die empfangene Struktur war vom Typ a, b oder c, so dass sie beispielsweise an einen typspezifischen Kanal übergeben werden kann.
type msgtype reflect.Type
.
.
nrOfBytes, err := udpConn.Read(recievedBytes)
if err != nil {...}
var msg interface{}
err = json.Unmarshal(recievedBytes[0:nrOfBytes], &msg)
if err != nil {...}
u := reflect.ValueOf(msg)
msgType := u.Type()
fmt.Printf("msg is of type: %s\n", msgType)
Mit gob dies leicht durch die Registrierung der Arten geschehen ist, aber ich habe json verwenden da es die Kommunikation über udp ist, so ist es trotzdem die benutzerdefinierten structs zu serialisiert? Ich möchte, dass die Druck
msg is of type: a
sein, aber ich bin nur
msg is of type: map[string]interface {}
Wie Sie senden/eine Nachricht erhalten? Ich schlage vor, dass Sie einen Endpunkt mit einem Typ angeben, damit Sie bereits wissen, was Sie erwarten. Nehmen wir an, Sie haben eine REST API, dann sollte alles POST to/a zu einer Struktur geparst werden. – nvcnvn
Ich habe versucht, was auch immer ich in einen Typ namens "Packet" packte, so dass ich nur diesen einen Typ mit einem "Data "Feld, das die benutzerdefinierte Struktur enthält. Leider hat sich nichts geändert –