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

Ещё один тривиальный вопрос, но без конкретного ответа в Гугле. Как

лучше трансформировать дженерик объект в обычный JSON в современном .NET?
Нужен подход именно с рефлексией, а быстрый новый генератор не подходит, потому как типы для серилизации не определены.

Самое очевидное это использовать конвертацию объекта в Stream асинхронным методом.
public static Task SerializeAsync<TValue>(
Stream utf8Json,
TValue value,
JsonSerializerOptions? options = null,
CancellationToken cancellationToken = default)

Но как после этого трансформировать Stream в строку нормальным образом?)


PS: Можно сделать синхронно, но я полагаю, что для объектов которые могут выдать строку длинной более 250000 символов это не лучший вариант.
var json = JsonSerializer.Serialize(jenericObj);

15 ответов

37 просмотров

Всмысле типы не определены

Ivan-Pavlov Автор вопроса
Oleg Gavrilov
Всмысле типы не определены

Типы объектов для серилизации могут быть любыми, иначе можно было бы использовать source generation для System.Text.Json.JsonSerializer.

обычно дело обстоит так. ты пишешь сериализатор для основного типа, а то, что зависит от генерик параметров - делегируешь в их сериализаторы

STJ вполне себе справляется в рефлективном режиме. Никто тебя не заставляет включать SourceGen режим

Ivan Pavlov
Типы объектов для серилизации могут быть любыми, и...

Ты хотя бы попробовал? Или просто подумал что это очень сложно для сериализатора (нет) и пришел сюда?

последняя строка решает твою проблему

Ivan Balanar
а пример такого можно?

да вроде все так работают, не? List<T>: ListSerializer.Serialize(List<T> list) { for (var i = 0; i < list.Count; i++) { SerializeContext.GetSerializer<T> () .Serialize(list[i]) } }

Anatoly
да вроде все так работают, не? List<T>: ListSeri...

я не веб программер и сериализацией не занимаюсь :) но для курса озоновского может понадобиться.

Ivan Balanar
я не веб программер и сериализацией не занимаюсь :...

в случае с жсоном там будет .StartArray перед циклом, потом endArray после цикла в случае с msgpack - в начало надо будет положить длину, от формата зависит, но общий смысл примерно такой

Ivan Balanar
я не веб программер и сериализацией не занимаюсь :...

Если для STJ - можешь сюда глянуть https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json/converters-how-to?pivots=dotnet-7-0 Или ты обобщенно спрашиваешь?

Ivan Balanar
я не веб программер и сериализацией не занимаюсь :...

https://github.com/progaudi/MsgPack.Light/blob/master/src/msgpack.light/Converters/ArrayConverter.cs

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта