Alterando um objeto imutável F #

Eu acho que o título está errado, mas não é possível criar um título que reflita, em resumo, o que eu quero alcançar.

Estou escrevendo uma função que chama um serviço e recupera dados como uma string JSON. A função analisa a string com umProvedor do tipo JSON. Sob certas condições, desejo alterar as propriedades desse objeto JSON e, em seguida, retornar a sequência do objeto alterado. Portanto, se a resposta da chamada foi

{"property1" : "value1","property2" : "value2", "property3": "value3" }

Quero alterar property3 para um novo valor e, em seguida, retornar a string JSON.

Se o JsonProvider fosse mutável, seria um exercício como:

type JsonResponse = 
        JsonProvider<""" {"property1" : "value1", 
                          "property2" : "value2",
                          "property3": "value3" } """>

let jsonResponse = JsonResponse.Parse(response)
jsonResponse.Property3 <- "new value"
jsonResponse.ToString()

No entanto, isso não funciona, pois a propriedade não pode ser definida. Estou tentando determinar a melhor maneira de resolver isso. Estou muito feliz em inicializar um novo objeto com base na resposta original, mas com parâmetros alterados, mas não tenho certeza se existe uma maneira fácil de conseguir isso.

Para referência, o objeto JSON está muito mais envolvido que o exemplo simples dado e contém uma hierarquia profunda.

questionAnswers(1)

yourAnswerToTheQuestion