gpt4 book ai didi

f# - Json Provider 可以反序列化为 Generic.Dictionary 吗?

转载 作者:行者123 更新时间:2023-12-01 01:00:09 26 4
gpt4 key购买 nike

我正在学习类型提供程序,它看起来像是一个突破性的功能。但是,我无法使用 JsonProvider 反序列化 json,以便目标类型具有 Generic.Dictionary 属性。它可以通过 Json.NET 来完成。这是代码:

type ByProv = JsonProvider<"""{"dict":{"A":1,"B":2}}""">
type ByHand(d:Dictionary<string,int>) =
member val dict = d with get,set

let text = """{"dict":{"C":3,"D":4}}"""
let newt = JsonConvert.DeserializeObject<ByHand> text
let prov = ByProv.Parse text
printfn "%A" newt.dict.["C"]
//Can only call statically inferred A or B (and it will throw at run-time)
printfn "%A" prov.Dict.A

显然, dict被推断为记录类型而不是 Dictionary默认情况下。这可以被覆盖吗?

最佳答案

JSON 类型提供程序假定 JSON 记录用于存储记录(具有固定字段名称)并且 JSON 数组用于存储集合。您的示例是这不起作用的情况之一。

当您需要访问具有动态命名字段的 JSON 记录时,您可以使用底层 JsonValue由提供的类型公开:

type ByProv = JsonProvider<"""{"dict":{"A":1,"B":2}}""">

let text = """{"dict":{"C":3,"D":4}}"""
let prov = ByProv.Parse text

prov.Dict.JsonValue.["C"].AsInteger()

这不太好,我想可以扩展 JSON 类型提供程序以更好地处理这个问题(并将记录更像数组)。随时提交问题以供讨论,或者向 F# Data on GitHub 提交拉取请求!

关于f# - Json Provider 可以反序列化为 Generic.Dictionary 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24182737/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com