更改不可变对象F#

时间:2014-06-27 08:27:37

标签: json f# type-providers f#-data

我认为这个标题是错误的,但不能创建一个标题,反映出我想要实现的目标。

我正在编写一个调用服务并将数据作为JSON字符串检索的函数。该函数用JSON type provider解析字符串。在某些条件下,我想修改该JSON对象的属性,然后返回修改对象的字符串。因此,如果来自呼叫的响应是

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

我想将property3更改为新值,然后返回JSON字符串。

如果JsonProvider是可变的,那么这将是一个练习:

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

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

但是,由于无法设置属性,因此无效。我想确定解决这个问题的最佳方法。我很乐意根据原始响应初始化一个新对象,但修改了参数,但我不确定是否有一种简单的方法可以实现这一点。

作为参考,JSON对象比给定的平面示例更复杂,并且包含深层次结构。

1 个答案:

答案 0 :(得分:6)

是的,你需要创建一个新对象,改变你想要的位数,然后使用现有对象的值。我们前后为XML和JSON类型提供程序添加了写API。您会注意到代表您的JSON的类型具有构造函数。您可以在this link

的底部看到使用此示例