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 ответов

39 просмотров

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

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
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
Карта сайта