169 похожих чатов

Всем привет! Подскажите как правильно сериализатору объяснить что null надо

в int option конвертнуть? Пользуюсь FSharp.SystemTextJson

Вот такой пример

type RecordWithNulls = {
[<JsonName "count">] Count: int option
}

let [<Literal>] json5 = """{"count": null}"""
let result = JsonSerializer.Deserialize<RecordWithNulls>(json5, options)

Возращает ошибку: System.Text.Json.JsonException: The JSON value could not be converted to System.Int32. Path: $ | LineNumber: 0 | BytePositionInLine: 4.

Опции сейчас такие

let options =
JsonFSharpOptions.Default()
.WithAllowNullFields()
.WithSkippableOptionFields()
.ToJsonSerializerOptions()

В целом опция .WithAllowNullFields() решают мою проблему можно убрать option и при null будет 0 как дефолт, но хочется уже добить именно с option.

8 ответов

24 просмотра

https://github.com/Tarmil/FSharp.SystemTextJson/blob/1b6dbd9f6fd5cfe46d8ec9c52bf1a99f8ef0395a/tests/FSharp.SystemTextJson.Tests/Test.Regression.fs#L74 https://github.com/Tarmil/FSharp.SystemTextJson/blob/master/README.md#faq

FYI если есть возможность пользоваться нутонсофтом, то там есть доп пакет Microsoft.FSharpLu.Json, где все это работает из коробки. И юнионы нормально обрабатывает тоже

Там null или поле отсутствует?

Boris-Glebov Автор вопроса
Андрій Чебукін
Там null или поле отсутствует?

null с отсутсвующими полями ок тоже все

Boris-Glebov Автор вопроса
Boris-Glebov Автор вопроса
Rustam
https://github.com/Tarmil/FSharp.SystemTextJson/bl...

Как я понял предложение попробовать UnwrapOptions но он для сериализации - я его тоже ставил, у меня с десериализацией проблема

Эта либа не допилена до конца. Она не поддерживает изменения и обработку сеттингов из .net 8.0. Возможно 7.0 тоже. Как раз касается обработки null'ов. Добавить это всё несложно, но автор её вроде пропал и не реагирует особо. Поэтому будет кто PR мержить или нет — неизвестно.

Denis
Эта либа не допилена до конца. Она не поддерживает...

Это я к тому, что она полностью переопределяет конвертер, и анализирует нативный конфиг от System.Text.Json. Т.к. под последние версии её не обновляли, то часть настроек, когда ты их добавляешь, не даёт никакого эффекта, просто потому что они никак не обрабатывается конвертером рекордов из этой либы. Также либа задизайнена так, что подписать то нужно со стороны — т.е. не меняя её саму — довольно трудно. Можно было бы хотя бы наследоваться от конвертера, но там нужные функции, которые, в частности, решают как поступать с null-ами, сделаны приватными, и следовательно ты там никак не подлезешь. Недавно разбирал и дибагал эту либу.

Похожие вопросы

Обсуждают сегодня

а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Добрый день. Хочу сделать отрисовку по команде на панели. Почему-то рисуется только при втором вызове. С чем может быть связано, не подскажете? procedure TForm1.FormDblClick(...
Kirill Filippenok
20
Всем доброго дня! Подскажите может кто использовал связку Pagebuilder + Clientsetting. Сами параметры с типом pagebuilder в модуле Clientsetting работают нормально, можно такж...
Александр Добриков
12
А почему в си некоторые вещи работают с двойными кавычками некоторые с одинарными? Нельзя было все сделать с одними или чтоб работало с разными? например чтоб выводить строки ...
.
15
Всем привет! Нужен совет от опытных. Переношу свой проект с Делфи 10.2 Токио на Лазарус 3.2 установленный через инсталлятор fpcupdeluxe-x86_64-win64. При импортировании проект...
Дмитрий Завгородний
7
Эх кто-то пришел и весь праздник испортил :( You need complex FBX scene importing setup to change things on import? good luck with that. You need navigation and pathfinding? g...
Serg Gini
5
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Всем привет! procedure TForm1.FormCreate(Sender: TObject); type TStartEnd = record S: Byte; E: Byte; end; var a, b: TStartEnd; begin {1} a.S := 1; {2} a.E := 2; ...
Руслан Михайлович
10
Всем привет!) я тут новенький и пытаюсь освоить evolution методом тыка. У меня при переходе между папками файлов выскакивают вот такие уведомления Можете подсказать как их от...
Диман Samoed
10
Какого хера? /Sources/App/Modules/User/Models/UserLinkApple.swift:21:20: warning: stored property '_id' of 'Sendable'-conforming class 'UserLinkApple' is mutable @ID(...
Alexander Sherbakov
14
Карта сайта