/
aprogrammer
/
yessql
Обзор
Документация
Войти
/
aprogrammer
/
yessql
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/YesSql.Core/Serialization/DynamicJsonConverter.cs
82 строки
3 KB
Mike Alhayek
Use System.Text.Json as the default serializer (#504) (#541)
03 май 2024, 01:09
Не верифицирован
03 май 2024, 01:09
a906437
Код
Авторство
О чём код?
using System; using System.Collections.Generic; using System.Dynamic; using System.Text.Json; using System.Text.Json.Serialization; namespace YesSql.Serialization { public class DynamicJsonConverter : JsonConverter<object> { public static readonly DynamicJsonConverter Instance = new(); public override object Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { switch (reader.TokenType) { case JsonTokenType.Null: return null; case JsonTokenType.False: return false; case JsonTokenType.True: return true; case JsonTokenType.String: return reader.GetString(); case JsonTokenType.Number: { if (reader.TryGetInt32(out var i)) return i; if (reader.TryGetInt64(out var l)) return l; // BigInteger could be added here. if (reader.TryGetDouble(out var d)) return d; throw new JsonException("Cannot parse number"); } case JsonTokenType.StartArray: { var list = new List<object>(); while (reader.Read()) { switch (reader.TokenType) { default: list.Add(Read(ref reader, typeof(object), options)); break; case JsonTokenType.EndArray: return list; } } throw new JsonException(); } case JsonTokenType.StartObject: IDictionary<string, object> dict = new ExpandoObject(); while (reader.Read()) { switch (reader.TokenType) { case JsonTokenType.EndObject: return dict; case JsonTokenType.PropertyName: var key = reader.GetString(); reader.Read(); dict[key] = Read(ref reader, typeof(object), options); break; default: throw new JsonException(); } } throw new JsonException(); default: throw new JsonException(string.Format("Unknown token {0}", reader.TokenType)); } } public override void Write( Utf8JsonWriter writer, object objectToWrite, JsonSerializerOptions options) => JsonSerializer.Serialize(writer, objectToWrite, objectToWrite.GetType(), options); } }