Я пытаюсь создать веб-API F # Asp.Net Core 3.0, куда я отправляю несколько записей 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
.
Теперь в моем контроллере я строю некоторые примеры данных и возвращаю их.
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 }
}
|]
Когда я смотрю на данные, возвращенные в 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
}
}
}
]
Кто-нибудь знает, как также отправить значения для типа объединения нескольких значений? Или вообще лучше сопоставить дискриминированные типы объединений с анонимными записями?
Спасибо!