假设:
let json = """
{
"KeyValuePairs": "[{\"Key\" : \"one\", \"Value\" : \"1\"},{\"Key\" : \"two\", \"Value\" : \"2\"}]"
}
"""
let dict = JsonConvert.DeserializeObject<Dictionary<System.String, System.String>>(json)
let kvpairs = dict.["KeyValuePairs"]
let kvlist = JsonConvert.DeserializeObject<KeyValuePair<System.String, System.String> List>(kvpairs)
let kvmap = [for kv in kvlist -> (kv.Key, kv.Value)] |> Map.ofList
我可以使用一个带管道的表达式而不是中间变量吗?如果是这样,那会是什么样的?
FWIW我试过了:
let kvpairs = JsonConvert.DeserializeObject<Dictionary<System.String, System.String>>(json)
|> (fun d -> d.["KeyValuePairs"])
但这给了我错误:
error FS0010: Unexpected infix operator in binding. Expected incomplete structured construct at or before this point or other
令牌。
更新:另一种方式:流入JsonConvert?
let kvpairs =
json
|> JsonConvert.DeserializeObject<Dictionary<System.String, System.String>>
|> (fun d -> d.["KeyValuePairs"])
这给了我:
错误FS0717:意外的类型参数
答案 0 :(得分:1)
在您的代码中
let kvpairs = JsonConvert.DeserializeObject<Dictionary<System.String, System.String>>(json)
|> (fun d -> d.["KeyValuePairs"])
管道没有缩进得足够远。
let kvpairs = JsonConvert.DeserializeObject<Dictionary<System.String, System.String>>(json)
|> (fun d -> d.["KeyValuePairs"])
或
let kvpairs = JsonConvert.DeserializeObject<Dictionary<System.String, System.String>>(json)
|> (fun d -> d.["KeyValuePairs"])
或
let kvpairs =
JsonConvert.DeserializeObject<Dictionary<System.String, System.String>>(json)
|> (fun d -> d.["KeyValuePairs"])
会奏效。