Penso che il titolo di questo sia sbagliato, ma non posso creare un titolo che rifletta, in astratto, ciò che voglio ottenere.Cambiare un oggetto immutabile F #
Sto scrivendo una funzione che chiama un servizio e recupera i dati come una stringa JSON. La funzione analizza la stringa con un JSON type provider. In determinate condizioni, desidero modificare le proprietà su quell'oggetto JSON e quindi restituire la stringa dell'oggetto modificato. Quindi, se la risposta dalla chiamata era
{"property1" : "value1","property2" : "value2", "property3": "value3" }
voglio cambiare property3 ad un nuovo valore e poi tornare la stringa JSON.
Se il JsonProvider era mutabile questo sarebbe un esercizio come:
type JsonResponse =
JsonProvider<""" {"property1" : "value1",
"property2" : "value2",
"property3": "value3" } """>
let jsonResponse = JsonResponse.Parse(response)
jsonResponse.Property3 <- "new value"
jsonResponse.ToString()
Tuttavia, questo non funziona in quanto la proprietà non può essere impostata. Sto cercando di accertare il modo migliore per risolvere questo problema. Sono abbastanza felice di inizializzare un nuovo oggetto basato sulla risposta originale ma con parametri modificati, ma non sono sicuro che ci sia un modo semplice per raggiungere questo obiettivo.
Per riferimento, l'oggetto JSON è molto più coinvolto rispetto all'esempio piatto fornito e contiene una gerarchia profonda.
Se il tipo di 'jsonResponse' era un record, è possibile eseguire' {jsonRespose con Property3 = "nuovo valore"} '. Ma non sembra funzionare. – svick
sfortunatamente, i provider di tipi non sono attualmente in grado di creare tipi di record. –