| File: System\Text\Json\Serialization\JsonConverterFactory.cs | Web Access |
| Project: src\runtime\src\libraries\System.Text.Json\src\System.Text.Json.csproj (System.Text.Json) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Diagnostics; using System.Text.Json.Serialization.Metadata; namespace System.Text.Json.Serialization { /// <summary> /// Supports converting several types by using a factory pattern. /// </summary> /// <remarks> /// This is useful for converters supporting generics, such as a converter for <see cref="System.Collections.Generic.List{T}"/>. /// </remarks> public abstract class JsonConverterFactory : JsonConverter { /// <summary> /// When overridden, constructs a new <see cref="JsonConverterFactory"/> instance. /// </summary> protected JsonConverterFactory() { } private protected override ConverterStrategy GetDefaultConverterStrategy() => ConverterStrategy.None; /// <summary> /// Create a converter for the provided <see cref="System.Type"/>. /// </summary> /// <param name="typeToConvert">The <see cref="System.Type"/> being converted.</param> /// <param name="options">The <see cref="JsonSerializerOptions"/> being used.</param> /// <returns> /// An instance of a <see cref="JsonConverter{T}"/> where T is compatible with <paramref name="typeToConvert"/>. /// If <see langword="null"/> is returned, a <see cref="NotSupportedException"/> will be thrown. /// </returns> public abstract JsonConverter? CreateConverter(Type typeToConvert, JsonSerializerOptions options); internal JsonConverter GetConverterInternal(Type typeToConvert, JsonSerializerOptions options) { Debug.Assert(CanConvert(typeToConvert)); JsonConverter? converter = CreateConverter(typeToConvert, options); switch (converter) { case null: ThrowHelper.ThrowInvalidOperationException_SerializerConverterFactoryReturnsNull(GetType()); break; case JsonConverterFactory: ThrowHelper.ThrowInvalidOperationException_SerializerConverterFactoryReturnsJsonConverterFactory(GetType()); break; } return converter; } internal sealed override object? ReadAsObject(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { Debug.Fail("We should never get here."); throw new InvalidOperationException(); } internal sealed override bool OnTryReadAsObject( ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options, scoped ref ReadStack state, out object? value) { Debug.Fail("We should never get here."); throw new InvalidOperationException(); } internal sealed override bool TryReadAsObject( ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options, scoped ref ReadStack state, out object? value) { Debug.Fail("We should never get here."); throw new InvalidOperationException(); } internal sealed override object? ReadAsPropertyNameAsObject(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { Debug.Fail("We should never get here."); throw new InvalidOperationException(); } internal sealed override object? ReadAsPropertyNameCoreAsObject(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { Debug.Fail("We should never get here."); throw new InvalidOperationException(); } internal sealed override object? ReadNumberWithCustomHandlingAsObject(ref Utf8JsonReader reader, JsonNumberHandling handling, JsonSerializerOptions options) { Debug.Fail("We should never get here."); throw new InvalidOperationException(); } internal sealed override void WriteAsObject(Utf8JsonWriter writer, object? value, JsonSerializerOptions options) { Debug.Fail("We should never get here."); throw new InvalidOperationException(); } internal sealed override bool OnTryWriteAsObject( Utf8JsonWriter writer, object? value, JsonSerializerOptions options, ref WriteStack state) { Debug.Fail("We should never get here."); throw new InvalidOperationException(); } internal sealed override bool TryWriteAsObject( Utf8JsonWriter writer, object? value, JsonSerializerOptions options, ref WriteStack state) { Debug.Fail("We should never get here."); throw new InvalidOperationException(); } internal sealed override void WriteAsPropertyNameAsObject(Utf8JsonWriter writer, object? value, JsonSerializerOptions options) { Debug.Fail("We should never get here."); throw new InvalidOperationException(); } /// <inheritdoc/> public sealed override Type? Type => null; internal sealed override void WriteAsPropertyNameCoreAsObject( Utf8JsonWriter writer, object? value, JsonSerializerOptions options, bool isWritingExtensionDataProperty) { Debug.Fail("We should never get here."); throw new InvalidOperationException(); } internal sealed override void WriteNumberWithCustomHandlingAsObject(Utf8JsonWriter writer, object? value, JsonNumberHandling handling) { Debug.Fail("We should never get here."); throw new InvalidOperationException(); } } }