лучше трансформировать дженерик объект в обычный 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);
Всмысле типы не определены
Типы объектов для серилизации могут быть любыми, иначе можно было бы использовать source generation для System.Text.Json.JsonSerializer.
обычно дело обстоит так. ты пишешь сериализатор для основного типа, а то, что зависит от генерик параметров - делегируешь в их сериализаторы
STJ вполне себе справляется в рефлективном режиме. Никто тебя не заставляет включать SourceGen режим
Dictionary<string, object>
Ты хотя бы попробовал? Или просто подумал что это очень сложно для сериализатора (нет) и пришел сюда?
последняя строка решает твою проблему
а пример такого можно?
да вроде все так работают, не? List<T>: ListSerializer.Serialize(List<T> list) { for (var i = 0; i < list.Count; i++) { SerializeContext.GetSerializer<T> () .Serialize(list[i]) } }
я не веб программер и сериализацией не занимаюсь :) но для курса озоновского может понадобиться.
в случае с жсоном там будет .StartArray перед циклом, потом endArray после цикла в случае с msgpack - в начало надо будет положить длину, от формата зависит, но общий смысл примерно такой
Если для STJ - можешь сюда глянуть https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json/converters-how-to?pivots=dotnet-7-0 Или ты обобщенно спрашиваешь?
не, принципа достаточно, спасибо.
https://github.com/progaudi/MsgPack.Light/blob/master/src/msgpack.light/Converters/ArrayConverter.cs
Обсуждают сегодня