重命名 FSharp.Data JsonProvider 的类型
Renaming type for FSharp.Data JsonProvider
我有一个看起来像这样的 JSON:
{
...
"names": [
{
"value": "Name",
"language": "en"
}
],
"descriptions": [
{
"value": "Sample description",
"language" "en"
}
],
...
}
当使用 FSharp.Data
库中的 JsonProvider
时,它将两个字段映射为同一类型 MyJsonProvider.Name
。使用代码时,这有点令人困惑。有什么办法可以将类型重命名为 MyJsonProvider.NameOrDescription
?我读到 CsvProvider 是可行的,但输入
JsonProvider<"./Resources/sample.json", Schema="Name->NameOrDescription">
导致错误。
另外,是否可以定义Description
字段实际上是一个Option<MyJsonProvider.NameOrDescription>
?或者我只需要定义 JSON 两次,一次使用所有可能的值,第二次只使用强制值?
[
{
...
"names": [
{
"value": "Name",
"language": "en"
}
],
"descriptions": [
{
"value": "Sample description",
"language" "en"
}
],
...
},
{
...
"names": [
{
"value": "Name",
"language": "en"
}
],
...
}
]
回答您的第一个问题,我认为没有指定此类重命名的方法。这将是一个相当合理的选择,但是 JSON 提供程序在此处生成名称时也可以更聪明(它知道该类型可以表示 Name
或 Description
,因此它可以生成一个名称Or
基于这些)。
作为技巧,您可以添加一个未使用的字段并使用正确的名称:
type A = JsonProvider<"""{
"do not use": { "value_with_langauge": {"value":"A", "language":"A"} },
"names": [ {"value":"A", "language":"A"} ],
"descriptions": [ {"value":"A", "language":"A"} ]
}""">
回答您的第二个问题 - 您的 names
和 descriptions
字段已经是数组,即 ValueWithLanguge[]
。为此,您不需要可选值。如果它们不存在,提供者只会给你一个空数组。
我有一个看起来像这样的 JSON:
{
...
"names": [
{
"value": "Name",
"language": "en"
}
],
"descriptions": [
{
"value": "Sample description",
"language" "en"
}
],
...
}
当使用 FSharp.Data
库中的 JsonProvider
时,它将两个字段映射为同一类型 MyJsonProvider.Name
。使用代码时,这有点令人困惑。有什么办法可以将类型重命名为 MyJsonProvider.NameOrDescription
?我读到 CsvProvider 是可行的,但输入
JsonProvider<"./Resources/sample.json", Schema="Name->NameOrDescription">
导致错误。
另外,是否可以定义Description
字段实际上是一个Option<MyJsonProvider.NameOrDescription>
?或者我只需要定义 JSON 两次,一次使用所有可能的值,第二次只使用强制值?
[
{
...
"names": [
{
"value": "Name",
"language": "en"
}
],
"descriptions": [
{
"value": "Sample description",
"language" "en"
}
],
...
},
{
...
"names": [
{
"value": "Name",
"language": "en"
}
],
...
}
]
回答您的第一个问题,我认为没有指定此类重命名的方法。这将是一个相当合理的选择,但是 JSON 提供程序在此处生成名称时也可以更聪明(它知道该类型可以表示 Name
或 Description
,因此它可以生成一个名称Or
基于这些)。
作为技巧,您可以添加一个未使用的字段并使用正确的名称:
type A = JsonProvider<"""{
"do not use": { "value_with_langauge": {"value":"A", "language":"A"} },
"names": [ {"value":"A", "language":"A"} ],
"descriptions": [ {"value":"A", "language":"A"} ]
}""">
回答您的第二个问题 - 您的 names
和 descriptions
字段已经是数组,即 ValueWithLanguge[]
。为此,您不需要可选值。如果它们不存在,提供者只会给你一个空数组。