ObjectConverter
namespace System.Text.Json.Serialization.Converters
{
internal sealed class ObjectConverter : JsonConverter<object>
{
public override object Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
using (JsonDocument jsonDocument = JsonDocument.ParseValue(ref reader))
return jsonDocument.RootElement.Clone();
}
public override void Write(Utf8JsonWriter writer, object value, JsonSerializerOptions options)
{
throw new InvalidOperationException();
}
internal override object ReadWithQuotes(ref Utf8JsonReader reader)
{
ThrowHelper.ThrowNotSupportedException_DictionaryKeyTypeNotSupported(TypeToConvert);
return null;
}
internal override void WriteWithQuotes(Utf8JsonWriter writer, object value, JsonSerializerOptions options, ref WriteStack state)
{
JsonConverter runtimeConverter = GetRuntimeConverter(value.GetType(), options);
runtimeConverter.WriteWithQuotesAsObject(writer, value, options, ref state);
}
private JsonConverter GetRuntimeConverter(Type runtimeType, JsonSerializerOptions options)
{
JsonConverter dictionaryKeyConverter = options.GetDictionaryKeyConverter(runtimeType);
if (dictionaryKeyConverter == this)
ThrowHelper.ThrowNotSupportedException_DictionaryKeyTypeNotSupported(runtimeType);
return dictionaryKeyConverter;
}
}
}