如何在 F# Asp Core Wep API 中序列化 F# 可区分的联合类型
How to serialize F# discriminated union types in F# Asp Core Wep API
我正在尝试构建一个 F# Asp.Net Core 3.0 Web API,我会在其中发送一些 F# 记录。
据我所知 Asp.Net Core 3.0 默认使用 System.Text.Json
将对象序列化为 json。
为了使域模型自我记录,我使用了 F# 区分联合类型。
模型看起来像这样:
type Starttime =
| NotStarted
| Started of DateTime
type Category = {
Name: string
Starttime: Starttime
}
type ValueId = ValueId of String
type Value = {
Id: ValueId
Category: Category
}
所以我有一个联合类型只有一种可能性 ValueId
并且我有一个联合类型有两种可能性 Starttime
与 NotStarted
和 Started
其中包含 DateTime
对象。
现在在我的控制器中,我构建了一些示例数据并return。
let isStarted i : Starttime =
if i % 2 = 0 then
Started DateTime.Now
else
NotStarted
[<HttpGet>]
member __.Get() : Value[] =
[|
for index in 1..2 ->
{
Id = ValueId (Guid.NewGuid().ToString())
Category = {
Name = sprintf "Category %i" index
Starttime = isStarted index }
}
|]
当我查看 return 在 json
中编辑的数据时,我得到了单选项联合类型(Guid)的数据,但我从未得到多选项联合类型的值。
[
{
"id": {
"tag": 0,
"item": "6ed07303-6dfa-42b4-88ae-391bbebf772a"
},
"category": {
"name": "Category 1",
"starttime": {
"tag": 0,
"isNotStarted": true,
"isStarted": false
}
}
},
{
"id": {
"tag": 0,
"item": "5e122579-4945-4f19-919c-ad4cf16ad0ed"
},
"category": {
"name": "Category 2",
"starttime": {
"tag": 1,
"isNotStarted": false,
"isStarted": true
}
}
}
]
有谁知道如何同时发送多值联合类型的值?
还是将受歧视的联合类型映射到匿名记录通常更好?
谢谢!
目前,System.Text.Json
不支持 F# 类型(关于这个 here 有一个未解决的问题)
现在,您可以改用 this library。
我正在尝试构建一个 F# Asp.Net Core 3.0 Web API,我会在其中发送一些 F# 记录。
据我所知 Asp.Net Core 3.0 默认使用 System.Text.Json
将对象序列化为 json。
为了使域模型自我记录,我使用了 F# 区分联合类型。
模型看起来像这样:
type Starttime =
| NotStarted
| Started of DateTime
type Category = {
Name: string
Starttime: Starttime
}
type ValueId = ValueId of String
type Value = {
Id: ValueId
Category: Category
}
所以我有一个联合类型只有一种可能性 ValueId
并且我有一个联合类型有两种可能性 Starttime
与 NotStarted
和 Started
其中包含 DateTime
对象。
现在在我的控制器中,我构建了一些示例数据并return。
let isStarted i : Starttime =
if i % 2 = 0 then
Started DateTime.Now
else
NotStarted
[<HttpGet>]
member __.Get() : Value[] =
[|
for index in 1..2 ->
{
Id = ValueId (Guid.NewGuid().ToString())
Category = {
Name = sprintf "Category %i" index
Starttime = isStarted index }
}
|]
当我查看 return 在 json
中编辑的数据时,我得到了单选项联合类型(Guid)的数据,但我从未得到多选项联合类型的值。
[
{
"id": {
"tag": 0,
"item": "6ed07303-6dfa-42b4-88ae-391bbebf772a"
},
"category": {
"name": "Category 1",
"starttime": {
"tag": 0,
"isNotStarted": true,
"isStarted": false
}
}
},
{
"id": {
"tag": 0,
"item": "5e122579-4945-4f19-919c-ad4cf16ad0ed"
},
"category": {
"name": "Category 2",
"starttime": {
"tag": 1,
"isNotStarted": false,
"isStarted": true
}
}
}
]
有谁知道如何同时发送多值联合类型的值? 还是将受歧视的联合类型映射到匿名记录通常更好?
谢谢!
目前,System.Text.Json
不支持 F# 类型(关于这个 here 有一个未解决的问题)
现在,您可以改用 this library。